web-dev-qa-db-ja.com

javaを使用して、Selenium WebDriver(Selenium 2)でページを上下にスクロールします

Javaを使用したページスクロール用に、Selenium 1(別名Selenium RC)で次のコードを記述しました。

Selenium.getEval("scrollBy(0, 250)");

Selenium 2(WebDriver)の同等のコードは何ですか?

55
Ripon Al Wasim

下にスクロール

WebDriver driver = new FirefoxDriver();
JavascriptExecutor jse = (JavascriptExecutor)driver;
jse.executeScript("window.scrollBy(0,250)", "");

または、次のようにできます。

jse.executeScript("scroll(0, 250);");

上にスクロール

jse.executeScript("window.scrollBy(0,-250)", "");
OR,
jse.executeScript("scroll(0, -250);");
93
Ripon Al Wasim

ページの一番下までスクロール:

JavascriptExecutor js = ((JavascriptExecutor) driver);
js.executeScript("window.scrollTo(0, document.body.scrollHeight)");
38
user3472488

Selenium Webdriverで上下にスクロールするには多くの方法がありますが、私は常にJava Scriptを使用して同じことを行います。

以下は、上下にスクロールしたい場合に常に機能するコードです

 // This  will scroll page 400 pixel vertical
  ((JavascriptExecutor)driver).executeScript("scroll(0,400)");

ここから完全なコードを取得できます Seleniumでページをスクロール

要素をスクロールする場合は、以下のコードが機能します。

je.executeScript("arguments[0].scrollIntoView(true);",element);

ここで完全なドキュメントを取得します 特定の要素をスクロール

12
Mukesh Otwani

これは(WebDriverの観点から)あなたの質問に対する正確な答えではないかもしれませんが、Java.awtライブラリはSelenium.Keysよりも安定していることがわかりました。したがって、前者を使用したページダウンアクションは次のようになります。

Robot robot = new Robot();
robot.keyPress(KeyEvent.VK_PAGE_DOWN);
robot.keyRelease(KeyEvent.VK_PAGE_DOWN);
10
rs79
JavascriptExecutor js = ((JavascriptExecutor) driver);

下にスクロール:

js.executeScript("window.scrollTo(0, document.body.scrollHeight);");

上にスクロール:

js.executeScript("window.scrollTo(0, -document.body.scrollHeight);");
3
CreaThor

JavaScriptや外部ライブラリを使用したくなかったため、これが私の解決策(C#)でした。

IWebElement body = Driver.FindElement(By.TagName("body"));

IAction scrollDown = new Actions(Driver)
    .MoveToElement(body, body.Size.Width - 10, 15) // position mouse over scrollbar
    .ClickAndHold()
    .MoveByOffset(0, 50) // scroll down
    .Release()
    .Build();

scrollDown.Perform();

これは、任意の要素を上下にスクロールするための拡張メソッドにすることも簡単にできます。

1
KthProg

これを試して

        Actions dragger = new Actions(driver);
        WebElement draggablePartOfScrollbar = driver.findElement(By.xpath("//*[@id='jobreslist_outercontainer']/div/div[2]/div"));

        // drag downwards
        int numberOfPixelsToDragTheScrollbarDown = 50;
        for (int i=10;i<500;i=i+numberOfPixelsToDragTheScrollbarDown){
            try{
        // this causes a gradual drag of the scroll bar, 10 units at a time
        dragger.moveToElement(draggablePartOfScrollbar).clickAndHold().moveByOffset(0,numberOfPixelsToDragTheScrollbarDown).release().perform();
        Thread.sleep(1000L);
            }catch(Exception e1){}
        } 

        // now drag opposite way (downwards)
        numberOfPixelsToDragTheScrollbarDown = -50;
        for (int i=500;i>10;i=i+numberOfPixelsToDragTheScrollbarDown){
        // this causes a gradual drag of the scroll bar, -10 units at a time
        dragger.moveToElement(draggablePartOfScrollbar).clickAndHold().moveByOffset(0,numberOfPixelsToDragTheScrollbarDown).release().perform();
        Thread.sleep(1000L);
        }
0
Maddy

Javascript executorは常に完璧に仕事をします:

((JavascriptExecutor) driver).executeScript("scroll(0,300)");

ここで、(0,300)はそれぞれ水平距離と垂直距離です。要件に応じて距離を置きます。

完璧主義者で、最初の試行でスクロールしたい正確な距離を取得したい場合は、このツール MeasureIt を使用してください。これは素晴らしいFirefoxアドオンです。

0
user7123229

リポンアルワシムの回答に感謝します。いくつか改善しました。ネットワークの問題のため、ループが切れるまで3回再試行します。

driver.get(url)
# Get scroll height
last_height = driver.execute_script("return document.body.scrollHeight")
try_times = 0
while True:
    # Scroll down to bottom
    driver.execute_script("window.scrollBy(0,2000)")

    # Wait to load page
    time.sleep(scroll_delay)
    # Calculate new scroll height and compare with last scroll height
    new_height = driver.execute_script("return document.body.scrollHeight")

    if last_height == new_height:
        try_times += 1

    if try_times > 3:
        try_times = 0
        break
    last_height = new_height
0
Ivan

Selenium.executeScript("window.scrollBy(0,450)", "")を使用してすべての要素を選択するには、ページにスクロールを追加する必要があります。

リストが大きい場合は、実行中にスクロールを数回追加します。スクロールは、ページ内の特定のポイント(0,450など)にのみ移動することに注意してください。

0
SufiWorld
JavascriptExecutor jse = ((JavascriptExecutor) driver);
jse.executeScript("window.scrollTo(0, document.body.scrollHeight)");

このコードは私のために機能します。私がテストしているページとして、下にスクロールするとロードされます。

0
Latha