上一篇:Java網路爬蟲實操(6)
大家好,我們平常瀏覽網頁經常會看到這樣的效果:滑鼠滾動到差不多底部的時候,才會載入新內容出來。然後一直滾就一直載入,比如外賣平臺上的評價資訊、社交平臺上的跟貼等等。
本篇文章介紹如何用seleinum技術模擬人對瀏覽器的操作
1) 準備工作
- 更新爬蟲框架NetDiscovery,我們基於框架進行演示
- 下載對應的瀏覽器driver程式,比如chrome的chromedriver,官方下載,映象下載
- 注意:driver程式一定要和瀏覽器版本匹配,建議直接裝最新的chrome和chromedriver(當前最新版本是2.36),如果是其他瀏覽器的話,也一樣的
- 目標:開啟一個網頁視窗,顯示內容並最大化,往下拉後載入出新的內容,最終對當前網頁截圖,在本地生成一個影像檔案
2) 程式實現邏輯
- 根據瀏覽器型別建立相應的物件new ChromeDriver(),並附上相應的action
- 通過chromedriver驅動程式開啟本地的chrome瀏覽器
- 用內建的js方法window.scrollBy()模擬人下拉網頁的操作
- 用driver自帶的getScreenshotAs()實現對網頁截圖
3) 寫程式碼
Main類
package com.cv4j.netdiscovery.example;
import com.cv4j.netdiscovery.core.Spider;
import com.cv4j.netdiscovery.selenium.Browser;
import com.cv4j.netdiscovery.selenium.downloader.SeleniumDownloader;
import org.openqa.selenium.WebDriver;
public class TestSelenium {
public static void main(String[] args) {
//設定瀏覽器的驅動程式
WebDriver driver = Browser.Chrome.init("example/chromedriver.exe");
//建立downloader類和action
ScrollAction scrollAction = new ScrollAction();
SeleniumDownloader seleniumDownloader = new SeleniumDownloader(driver, scrollAction);
//設定並啟動爬蟲
Spider.create()
.name("testseleinum")
.url("https://www.ele.me/shop/1919756/rate")
.downloader(seleniumDownloader)
.run();
}
}
複製程式碼
SeleniumAction類
package com.cv4j.netdiscovery.example;
import com.cv4j.netdiscovery.selenium.SeleniumAction;
import com.cv4j.netdiscovery.selenium.Utils;
import org.openqa.selenium.WebDriver;
public class ScrollAction implements SeleniumAction {
@Override
public void execute(WebDriver driver) {
try {
//最大化
driver.manage().window().maximize();
//停頓2秒
Thread.sleep(2000);
//往下滾動200px
Utils.scroll(driver, 200);
//對當前網頁截圖
Utils.taskScreenShot(driver, "D:\\work\\test.png");
} catch(InterruptedException e) {
}
}
}
複製程式碼
執行結果
4) 總結
seleinum本質上是一種自動化測試工具,在爬蟲技術中主要用來模擬人對瀏覽器的操作,理論上人通過滑鼠鍵盤操作的所有過程,都可以用程式程式碼模擬出來,然後獲取我們想要的網頁資料。
試用下來發現NetDiscovery框架對seleinum操作的支援還比較簡單,我會繼續關注。
下一篇:Java網路爬蟲實操(8)