java 利用selenium+chromedriver實現爬蟲
1、相關jar包
jsoup-1.11.2.jar
log4j-1.2.8.jar
selenium-server-standalone-2.40.0.jar
可以自行找其它版本的jar包代替。
2、下載chromeDriver,並完成相關配置
注意:chromeDriver與chrome版本有關,如果版本不一致會發生錯誤。
下載chromeDriver: http://chromedriver.storage.googleapis.com/index.html
下載時一定要看清版本
chromeDriver下載完成之後,將chromeDriver.exe 放在chrome瀏覽器根目錄下,或者在配置環境變數,為了方便我直接把chromeDriver.exe 放在了瀏覽器根目錄下。

chrome.png
3、程式,以解析簡書為例
3.1、初始化一個webDriver,並通過傳入的網址獲取到該網址的原始碼(開啟瀏覽器,不能向下滑動)
/** * 開啟瀏覽器,不能向下滑動 * @param url * @return */ public static Document getDocument(String url){ Document doc = null; //可使用的瀏覽器有:IE瀏覽器(webdriver.ie.driver) //火狐瀏覽器(webdriver.gecko.driver) //谷歌瀏覽器 (webdriver.chrome.driver) //是使用那個瀏覽器chromedriver所在的位置 System.setProperty("webdriver.chrome.driver", "C:\\Program Files (x86)\\Google\\Chrome\\Application\\chromedriver.exe"); // InternetExplorerDriver()瀏覽器 // FirefoxDriver()火狐瀏覽器 //谷歌瀏覽器 WebDriver driver = new ChromeDriver(); driver.get(url); //等待幾秒 try { //((JavascriptExecutor)driver).executeScript("scrollTo(0,10000)"); Thread.sleep(20000); } catch (InterruptedException e) { e.printStackTrace(); } doc = Jsoup.parse(driver.getPageSource()); //關閉瀏覽器 driver.close(); driver.quit(); return doc; }
3.2、解析獲取到的內容
/** * 解析傳過來的doc * @param doc */ public static void parse(Document doc){ if(doc == null){ logger.info("doc is null, unable to continue! "); return ; } Elements content = doc.select("div.content"); //System.out.println(select); for (Element element : content) { //獲取文章標題 String title = element.select("a.title").text(); //獲取獲取帖子網址 String url = element.select("a.title").attr("href"); url = "https://www.jianshu.com" + url; //獲取文章的摘要 String digest = element.select("p.abstract").text(); //獲取文章作者名稱 String author = element.select("a.nickname").text(); //獲取作者網址 String authorUrl = element.select("a.nickname").attr("href"); authorUrl = "https://www.jianshu.com" + authorUrl; logger.info("title: " + title); logger.info("url: " + url); logger.info("digest:" + digest); logger.info("author: " + author); logger.info("authorUrl: " + authorUrl); logger.info("--------------\n"); } }
3.3、檢視測試結果

result.png
3.4、開啟瀏覽器,滾動條向下滑動
/** * 開啟瀏覽器,向下滑動 * @param url * @return */ public static Document getDocument(String url){ Document doc = null; //可使用的瀏覽器有:IE瀏覽器(webdriver.ie.driver) //火狐瀏覽器(webdriver.gecko.driver) //谷歌瀏覽器 (webdriver.chrome.driver) //是使用那個瀏覽器chromedriver所在的位置 System.setProperty("webdriver.chrome.driver", "C:\\Program Files (x86)\\Google\\Chrome\\Application\\chromedriver.exe"); // InternetExplorerDriver()瀏覽器 // FirefoxDriver()火狐瀏覽器 //谷歌瀏覽器 WebDriver driver = new ChromeDriver(); driver.get(url); //等待幾秒 try { //向下滾動方法一 //JavascriptExecutor js = (JavascriptExecutor)driver; //js.executeScript("scrollTo(0,20000)"); //向下滾動 方法二 ((JavascriptExecutor)driver).executeScript("scrollTo(0,10000)"); Thread.sleep(20000); } catch (InterruptedException e) { e.printStackTrace(); } doc = Jsoup.parse(driver.getPageSource()); //關閉瀏覽器 driver.close(); driver.quit(); return doc; }
3.5、不開啟瀏覽器
/** * 瀏覽器後臺執行,向下滑動 * @param url * @return */ public static Document getDocument(String url){ Document doc = null; //可使用的瀏覽器有:IE瀏覽器(webdriver.ie.driver) //火狐瀏覽器(webdriver.gecko.driver) //谷歌瀏覽器 (webdriver.chrome.driver) //是使用那個瀏覽器chromedriver所在的位置 System.setProperty("webdriver.chrome.driver", "C:\\Program Files (x86)\\Google\\Chrome\\Application\\chromedriver.exe"); // InternetExplorerDriver()瀏覽器 // FirefoxDriver()火狐瀏覽器 //谷歌瀏覽器 WebDriver driver = null; //建立chrome引數物件 ChromeOptions options = new ChromeOptions(); //瀏覽器後臺執行 options.addArguments("headless"); driver = new ChromeDriver(options); driver.get(url); //等待幾秒 try { //向下滾動方法一 //JavascriptExecutor js = (JavascriptExecutor)driver; //js.executeScript("scrollTo(0,20000)"); //向下滾動 方法二 ((JavascriptExecutor)driver).executeScript("scrollTo(0,10000)"); Thread.sleep(20000); } catch (InterruptedException e) { e.printStackTrace(); } doc = Jsoup.parse(driver.getPageSource()); //關閉瀏覽器 driver.close(); driver.quit(); return doc; }