日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

Java selenium操作下拉滚动条的几种方法

發布時間:2024/4/17 java 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java selenium操作下拉滚动条的几种方法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

數據采集中,經常遇到動態加載的數據,我們經常使用selenium模擬瀏覽器操作,需要多次下拉刷新頁面才能采集到所有的數據,就此總結了幾種selenium操作下拉滾動條的幾種方法
我這里演示的是Java版本的,使用chromedriver,當然你可以換成python或其他語言,瀏覽器用firefox或者phantomjs(無頭瀏覽器),大部分都是適用的,不同瀏覽器有略微的差異。

初始化一個瀏覽器

首先要允許瀏覽器運行js腳本

DesiredCapabilities sCaps = new DesiredCapabilities(); sCaps.setJavascriptEnabled(true); System.getProperties().setProperty("webdriver.chrome.driver", "D:/tool/chromedriver.exe"); WebDriver webDriver = new ChromeDriver(sCaps);

1.直接操作頁面

#下拉到頁面底部 ((JavascriptExecutor) webDriver).executeScript("window.scrollTo(0,document.body.scrollHeight)"); #上拉到頁面頂端 ((JavascriptExecutor) webDriver).executeScript("window.scrollTo(document.body.scrollHeight,0)");

或:

#下拉到頁面1000位置 ((JavascriptExecutor) webDriver).executeScript("window.scrollTo(0,1000)"); #上拉到頁面頂端 0,0位置 ((JavascriptExecutor) webDriver).executeScript("window.scrollTo(0,0)");

### 2.拖動到頁面元素位置

經過測試這種方式最靠譜,在Chrome和phantomjs都測試通過,而其他方式有些網站在Chrome中沒問題,但到了phantomjs中就有問題了,頁面根本不動。
不過這幾種方式對大部分網站應該還是都可以的。

比如要把頁面拖動到id為test的元素位置,當然findElement方法還支持xpath和css選擇器等多種方式

String script = "return arguments[0].scrollIntoView();"; WebElement element = webDriver.findElement(By.id("#test")); ((JavascriptExecutor) webDriver).executeScript(script, element);

3. 發送PAGE_DOWN、END等鍵盤事件

  • END:可以讓頁面直接下拉到底
  • HOME:上拉到頂端
  • PAGE_DOWN:小幅度下拉
org.openqa.selenium.Keys 模塊中常用的變量屬性 含義
  • Keys.DOWN, Keys.UP, Keys.LEFT,Keys.RIGHT 鍵盤箭頭鍵
  • Keys.ENTER, Keys.RETURN 回車和換行鍵
  • Keys.HOME, Keys.END,
  • Keys.PAGE_DOWN,Keys.PAGE_UP
  • Home 鍵、End 鍵、PageUp 鍵和Page Down 鍵
  • Keys.ESCAPE, Keys.BACK_SPACE,Keys.DELETE Esc、Backspace 和字母鍵
  • Keys.F1, Keys.F2, . . . , Keys.F12 鍵盤頂部的F1 到F12 鍵
  • Keys.TAB Tab 鍵
  • ...
WebElement webElement = webDriver.findElement(By.cssSelector("body"));webElement.click(); // 有的時候必須點擊一下,下拉才能生效(有的網站是這樣,原因未找到) #小幅度下拉webElement.sendKeys(Keys.PAGE_DOWN); #或者直接下拉到底webElement.sendKeys(Keys.END);

查看源碼可以看出來,selenium封裝了鍵盤上的Key,意思是我們可以通過sendKeys發送鍵盤事件,比如搜索的時候點擊ENTER事件

public enum Keys implements CharSequence {NULL('\ue000'),CANCEL('\ue001'),HELP('\ue002'),BACK_SPACE('\ue003'),TAB('\ue004'),CLEAR('\ue005'),RETURN('\ue006'),ENTER('\ue007'),SHIFT('\ue008'),LEFT_SHIFT(SHIFT),CONTROL('\ue009'),LEFT_CONTROL(CONTROL),ALT('\ue00a'),LEFT_ALT(ALT),PAUSE('\ue00b'),ESCAPE('\ue00c'),SPACE('\ue00d'),PAGE_UP('\ue00e'),PAGE_DOWN('\ue00f'),END('\ue010'),HOME('\ue011'),LEFT('\ue012'),ARROW_LEFT(LEFT),UP('\ue013'),ARROW_UP(UP),RIGHT('\ue014'),ARROW_RIGHT(RIGHT),DOWN('\ue015'),ARROW_DOWN(DOWN),INSERT('\ue016'),DELETE('\ue017'),SEMICOLON('\ue018'),EQUALS('\ue019'),NUMPAD0('\ue01a'),NUMPAD1('\ue01b'),NUMPAD2('\ue01c'),NUMPAD3('\ue01d'),NUMPAD4('\ue01e'),NUMPAD5('\ue01f'),NUMPAD6('\ue020'),NUMPAD7('\ue021'),NUMPAD8('\ue022'),NUMPAD9('\ue023'),MULTIPLY('\ue024'),ADD('\ue025'),SEPARATOR('\ue026'),SUBTRACT('\ue027'),DECIMAL('\ue028'),DIVIDE('\ue029'),F1('\ue031'),F2('\ue032'),F3('\ue033'),F4('\ue034'),F5('\ue035'),F6('\ue036'),F7('\ue037'),F8('\ue038'),F9('\ue039'),F10('\ue03a'),F11('\ue03b'),F12('\ue03c'),META('\ue03d'),COMMAND(META),ZENKAKU_HANKAKU('\ue040');private final char keyCode;... }

一個完整的示例

public class SeleniumTest {public static void main(String[] args) throws Exception {System.setProperty("webdriver.chrome.driver", "D:/tool/chromedriver.exe");WebDriver webDriver = new ChromeDriver();webDriver.get("https://m.weibo.cn/");Thread.sleep(1000);for (int i = 0; i < 10; i++) {System.out.println("sleep 1s");Thread.sleep(1000);((JavascriptExecutor) webDriver).executeScript("window.scrollTo(0,"+(i * 500)+")");}} }

總結

以上是生活随笔為你收集整理的Java selenium操作下拉滚动条的几种方法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。