Javaを使用したページスクロール用に、Selenium 1(別名Selenium RC)で次のコードを記述しました。
Selenium.getEval("scrollBy(0, 250)");
Selenium 2(WebDriver)の同等のコードは何ですか?
下にスクロール:
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);");
ページの一番下までスクロール:
JavascriptExecutor js = ((JavascriptExecutor) driver);
js.executeScript("window.scrollTo(0, document.body.scrollHeight)");
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);
ここで完全なドキュメントを取得します 特定の要素をスクロール
これは(WebDriverの観点から)あなたの質問に対する正確な答えではないかもしれませんが、Java.awt
ライブラリはSelenium.Keys
よりも安定していることがわかりました。したがって、前者を使用したページダウンアクションは次のようになります。
Robot robot = new Robot();
robot.keyPress(KeyEvent.VK_PAGE_DOWN);
robot.keyRelease(KeyEvent.VK_PAGE_DOWN);
JavascriptExecutor js = ((JavascriptExecutor) driver);
下にスクロール:
js.executeScript("window.scrollTo(0, document.body.scrollHeight);");
上にスクロール:
js.executeScript("window.scrollTo(0, -document.body.scrollHeight);");
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();
これは、任意の要素を上下にスクロールするための拡張メソッドにすることも簡単にできます。
これを試して
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);
}
Javascript executorは常に完璧に仕事をします:
((JavascriptExecutor) driver).executeScript("scroll(0,300)");
ここで、(0,300)
はそれぞれ水平距離と垂直距離です。要件に応じて距離を置きます。
完璧主義者で、最初の試行でスクロールしたい正確な距離を取得したい場合は、このツール MeasureIt を使用してください。これは素晴らしいFirefoxアドオンです。
リポンアルワシムの回答に感謝します。いくつか改善しました。ネットワークの問題のため、ループが切れるまで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
Selenium.executeScript("window.scrollBy(0,450)", "")
を使用してすべての要素を選択するには、ページにスクロールを追加する必要があります。
リストが大きい場合は、実行中にスクロールを数回追加します。スクロールは、ページ内の特定のポイント(0,450など)にのみ移動することに注意してください。
JavascriptExecutor jse = ((JavascriptExecutor) driver);
jse.executeScript("window.scrollTo(0, document.body.scrollHeight)");
このコードは私のために機能します。私がテストしているページとして、下にスクロールするとロードされます。