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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > HTML >内容正文

HTML

【java】Selenium爬虫控制谷歌浏览器

發(fā)布時間:2023/12/8 HTML 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【java】Selenium爬虫控制谷歌浏览器 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

每逢佳節(jié)倍思親,中秋節(jié)到了,這里祝愿大家中秋節(jié)快樂。

今天主要向大家介紹的是如何自動打開瀏覽器并自動搜索指定內(nèi)容。

1. 下載谷歌瀏覽器驅(qū)動

為什么要下載驅(qū)動?

因為一般的寫爬蟲的方法是用腳本直接對目標網(wǎng)站進行訪問,而且只對目標數(shù)據(jù)進行采集,訪問速度很快,這樣目標網(wǎng)站很容易就識別出你是爬蟲,然后把你封鎖了。這個時候,為了更加像人瀏覽網(wǎng)站,需要一個控制器來控制瀏覽器,這樣就可以避開封鎖,很多難爬的網(wǎng)站也可以輕而易舉的抓數(shù)據(jù)了。

我們就是通過一個叫做Selenium的工具做到模擬人瀏覽瀏覽器的,當然,Selenium不僅如此,它還是一個用于Web應(yīng)用程序測試的工具。Selenium測試直接運行在瀏覽器中,就像真正的用戶在操作一樣。這個工具的主要功能包括:測試與瀏覽器的兼容性——測試你的應(yīng)用程序看是否能夠很好得工作在不同瀏覽器和操作系統(tǒng)之上。測試系統(tǒng)功能——創(chuàng)建回歸測試檢驗軟件功能和用戶需求。支持自動錄制動作和自動生成 .Net、Java、Perl等不同語言的測試腳本。

針對不同的瀏覽器,控制底層的邏輯實現(xiàn)不同,因此,不同的瀏覽器需要下載不同的驅(qū)動,這有點類似于連接到不同的數(shù)據(jù)庫時需要不同的數(shù)據(jù)庫驅(qū)動一樣,這里提供一個谷歌瀏覽器的驅(qū)動下載鏈接:谷歌瀏覽器驅(qū)動。

2. 元素定位之XPath

XPath即為XML路徑語言,它是一種用來確定XML(標準通用標記語言的子集)文檔中某部分位置的語言。XPath基于XML的樹狀結(jié)構(gòu),提供在數(shù)據(jù)結(jié)構(gòu)樹中找尋節(jié)點的能力,在實際開發(fā)自動化腳本過程中,XPath的使用是最多的一種方法。關(guān)于XPath的其他內(nèi)容,讀者可以自行百度。

這里主要介紹一下如何獲取某一個元素的XPath,例如,我們以獲取百度首頁的搜索文本框填入搜索內(nèi)容后點擊搜索按鈕距離。

上述操作對于沒有接觸過谷歌瀏覽器的讀者可能有一定的困難,如果有不懂可以評論區(qū)留蘭。

copy xpath后,直接黏貼,可以看到如下的路徑字符串:?

//*[@id="kw"]

為了實現(xiàn)搜索,我們也獲取一下“百度一下”按鈕的XPath:?

//*[@id="su"]

3. 搜索內(nèi)容

下面演示一下如何打開瀏覽器并輸入搜索“中秋快樂”的。

3.1 添加依賴

首先,建立一個maven項目,并在pom.xml中添加依賴的jar包:

<dependency><groupId>org.seleniumhq.selenium</groupId><artifactId>selenium-java</artifactId><version>3.4.0</version> </dependency>

接著,編寫我們主要的代碼:

3.2?獲取驅(qū)動對象

/** * 獲取Chrome驅(qū)動 * * @param path 路徑 * @return * @throws Exception */ public static WebDriver createChromeWebDriver(String path) throws Exception {if (path == null || "".equals(path)) {throw new Exception("配置錯誤, 沒有配置:chrome path");}System.getProperties().setProperty("webdriver.chrome.driver", path);WebDriver webDriver = new ChromeDriver();webDriver.manage().timeouts().pageLoadTimeout(1200, TimeUnit.SECONDS);webDriver.manage().window().setSize(new Dimension(1024, 768));return webDriver; }

3.3?搜索

/** * 搜索 * * @param key 關(guān)鍵字 */ public static void search(WebDriver driver, String key) {driver.get("http://baidu.com/");WebElement elementKey = driver.findElement(By.xpath("//*[@id=\"kw\"]"));elementKey.sendKeys(key);WebElement elementClick = driver.findElement(By.xpath("//*[@id=\"su\"]"));elementClick.click(); }

3.4?主函數(shù)?

public static void main(String[] args) {WebDriver webDriver;try {webDriver = createChromeWebDriver("webdrivers\\chromedriver.exe");search(webDriver, "中秋快樂");} catch (Exception e) {e.printStackTrace();} }

3.5?完整代碼和效果?

package com.clawer.logintest;import java.util.concurrent.TimeUnit;import org.openqa.selenium.By; import org.openqa.selenium.Dimension; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.chrome.ChromeDriver;/*** 百度搜索*/ public class App {public static void main(String[] args) {WebDriver webDriver;try {webDriver = createChromeWebDriver("driver\\chromedriver.exe");search(webDriver, "中秋快樂");} catch (Exception e) {e.printStackTrace();}}/*** 創(chuàng)建Chrome** @param path 路徑* @return* @throws Exception*/public static WebDriver createChromeWebDriver(String path) throws Exception {if (path == null || "".equals(path)) {throw new Exception("配置錯誤, 沒有配置:chrome path");}System.getProperties().setProperty("webdriver.chrome.driver", path);WebDriver webDriver = new ChromeDriver();webDriver.manage().timeouts().pageLoadTimeout(1200, TimeUnit.SECONDS);webDriver.manage().window().setSize(new Dimension(1024, 768));return webDriver;}/*** 搜索* * @param key 關(guān)鍵字*/public static void search(WebDriver driver, String key) {driver.get("http://baidu.com/");WebElement elementKey = driver.findElement(By.xpath("//*[@id=\"kw\"]"));elementKey.sendKeys(key);WebElement elementClick = driver.findElement(By.xpath("//*[@id=\"su\"]"));elementClick.click();} }

?4.?報錯處理

unknown error: call function result missing 'value',網(wǎng)上關(guān)于這個錯誤的說法是chrome版本和driver的版本不一致,因此,筆者這里建議升級chrome,并下載對應(yīng)的驅(qū)動。

Starting ChromeDriver 2.33.506120 (e3e53437346286c0bc2d2dc9aa4915ba81d9023f) on port 38667 Only local connections are allowed. 九月 13, 2019 2:27:01 下午 org.openqa.selenium.remote.ProtocolHandshake createSession 信息: Detected dialect: OSS org.openqa.selenium.WebDriverException: unknown error: call function result missing 'value'(Session info: chrome=76.0.3809.100)(Driver info: chromedriver=2.33.506120 (e3e53437346286c0bc2d2dc9aa4915ba81d9023f),platform=Windows NT 10.0.17134 x86_64) (WARNING: The server did not provide any stacktrace information) Command duration or timeout: 81 milliseconds Build info: version: '3.4.0', revision: 'unknown', time: 'unknown' System info: host: 'MicroWin10-2025', ip: '192.168.44.45', os.name: 'Windows 10', os.arch: 'amd64', os.version: '10.0', java.version: '1.8.0_131' Driver info: org.openqa.selenium.chrome.ChromeDriver Capabilities [{applicationCacheEnabled=false, rotatable=false, mobileEmulationEnabled=false, networkConnectionEnabled=false, chrome={chromedriverVersion=2.33.506120 (e3e53437346286c0bc2d2dc9aa4915ba81d9023f), userDataDir=C:\Users\ADMINI~1\AppData\Local\Temp\scoped_dir8664_25666}, takesHeapSnapshot=true, pageLoadStrategy=normal, databaseEnabled=false, handlesAlerts=true, hasTouchScreen=false, version=76.0.3809.100, platform=XP, browserConnectionEnabled=false, nativeEvents=true, acceptSslCerts=true, locationContextEnabled=true, webStorageEnabled=true, browserName=chrome, takesScreenshot=true, javascriptEnabled=true, cssSelectorsEnabled=true, setWindowRect=true, unexpectedAlertBehaviour=}] Session ID: 879a1a7546fff18bd185a2a8a54c6b48at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)at java.lang.reflect.Constructor.newInstance(Constructor.java:423)at org.openqa.selenium.remote.ErrorHandler.createThrowable(ErrorHandler.java:215)at org.openqa.selenium.remote.ErrorHandler.throwIfResponseFailed(ErrorHandler.java:167)at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:671)at org.openqa.selenium.remote.RemoteWebElement.execute(RemoteWebElement.java:272)at org.openqa.selenium.remote.RemoteWebElement.sendKeys(RemoteWebElement.java:96)at com.clawer.logintest.App.search(App.java:52)at com.clawer.logintest.App.main(App.java:20)

?

總結(jié)

以上是生活随笔為你收集整理的【java】Selenium爬虫控制谷歌浏览器的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。