北京開放疫情最新消息關(guān)鍵詞優(yōu)化精靈
一、 Selenium
Selenium是最廣泛使用的開源Web UI(用戶界面)自動(dòng)化測(cè)試套件之一,支持并行測(cè)試執(zhí)行。Selenium通過(guò)使用特定于每種語(yǔ)言的驅(qū)動(dòng)程序支持各種編程語(yǔ)言。Selenium支持的語(yǔ)言包括C#,Java,Perl,PHP,Python和Ruby。Selenium支持的瀏覽器包括Internet Explorer,Mozilla Firefox,Google Chrome和Safari。
二、 Selenium WebDriver
WebDriver是由Selenium主持的W3C的一個(gè)標(biāo)準(zhǔn)。利用瀏覽器原生的API來(lái)與瀏覽器進(jìn)行交互。使用了Client-Server的模式,還實(shí)現(xiàn)了一個(gè)基于HTTP的服務(wù),對(duì)selenium提供了一套API。不同了瀏覽器的廠商提供自己對(duì)應(yīng)的webdriver,Chrome的Chromedriver,Firefox就有專門的FirefoxDriver等,但是對(duì)外提供的API是一致的。Webdriver可以通過(guò)瀏覽器原生的API,對(duì)瀏覽器進(jìn)行各種操作,由于是廠商自己提供的,穩(wěn)定性、可靠性和安全性都是有保障的。
三、瀏覽器
常見的瀏覽器IE、Microsoft Edge、Chrome/Chromium、Firefox、Safari等,selenium都支持。Chrome和Chromium對(duì)比:
Chromium | Chrome |
---|---|
開源項(xiàng)目 | 不是開源項(xiàng)目 |
開發(fā)版,更新速度快,會(huì)添加新功能,性能稍低 | 是正式版,更新速度慢,比較穩(wěn)定,性能高 |
沒有自動(dòng)更新 | 聯(lián)網(wǎng)可以檢測(cè)更新 |
四、Selenium工作原理
各個(gè)瀏覽器廠商根據(jù)WebDriver協(xié)議實(shí)現(xiàn)各自瀏覽器的webdriver,webdriver是可以向selenium客戶端提供統(tǒng)一http接口的,常見的開發(fā)語(yǔ)言都可以實(shí)現(xiàn)selenium客戶端Python、Java、C#等。
Webdriver協(xié)議接口 https://www.w3.org/TR/webdriver1/#list-of-endpoints
以Python selenium為例,實(shí)現(xiàn)了相關(guān)的接口協(xié)議
可以看出selenium支持多種瀏覽器。
調(diào)用Chrome瀏覽器時(shí),selenium初始化過(guò)程中先,將chromedriver作為參數(shù)初始化Server類,并且執(zhí)行start方法。
進(jìn)到start方法中可以看到,執(zhí)行了一個(gè)CMD的命令,就是在啟動(dòng)chromedriver.exe服務(wù)。
在初始化Server過(guò)程中起到了給chromedriver指定了一個(gè)空閑的端口號(hào)。
可以看到后臺(tái)進(jìn)程chromedriver進(jìn)程并且監(jiān)聽51650端口
Selenium 發(fā)送http請(qǐng)求給webdriver,啟動(dòng)瀏覽器(有些網(wǎng)站反爬策略,會(huì)監(jiān)控是否是webdriver驅(qū)動(dòng)的瀏覽器)
當(dāng)打開一個(gè)網(wǎng)頁(yè)是調(diào)用get方法,其實(shí)是給webdriver發(fā)送對(duì)應(yīng)的http請(qǐng)求
五、反爬檢測(cè)
1、 檢測(cè)瀏覽器指紋
檢測(cè)網(wǎng)站 https://bot.sannysoft.com/,左邊是selenium啟動(dòng)的chromium,右邊是手動(dòng)啟動(dòng)。
2、 瀏覽器啟動(dòng)參數(shù)
查看命令 wmic process where caption=“chrome.exe” get caption,commandline /value
Selenium通過(guò)webdriver啟動(dòng)瀏覽器參數(shù)
手動(dòng)啟動(dòng)瀏覽器參數(shù)
3、檢測(cè)瀏覽器驅(qū)動(dòng)
如果使用webdriver啟動(dòng)的瀏覽器,會(huì)被檢測(cè)window.navigator.webdriver
4、 檢測(cè)webdriver特征
Webdriver源碼:
檢測(cè)結(jié)果淘寶滑動(dòng)驗(yàn)證失敗:
通過(guò)js可以看出對(duì)webdriver的特征檢測(cè)等
六、優(yōu)化方案
1、 給webdriver添加日志選項(xiàng),方便出問(wèn)題時(shí)定位分析。
2、 使用undetected_chromedriver隱藏特殊標(biāo)識(shí)
1)、打開瀏覽器的時(shí),注入js修改webdriver屬性值。
3、 修改webdriver二進(jìn)制文件中的特征值
4、 先啟動(dòng)瀏覽器,然后再使用webdriver連接控制。
七、擴(kuò)展(Chrome DevTools Protocol)
谷歌瀏覽器開發(fā)協(xié)議,Chrome DevTools 就是一個(gè) Web 服務(wù)工具,它通過(guò)使用 Chrome DevTools Protocol 與后端進(jìn)行交互。瀏覽器啟動(dòng)時(shí)加上參數(shù) --remote-debugging-port={port}就可以通過(guò)發(fā)送http和websocket請(qǐng)求直接控制瀏覽器。
啟動(dòng)瀏覽器chrome.exe --remote-debugging-port=9255
發(fā)送請(qǐng)求查看瀏覽器信息,包含websocket連接url。
新建瀏覽器標(biāo)簽頁(yè),其中頁(yè)包含了新標(biāo)簽頁(yè)的websocket連接url。
Cdp開源信息 https://github.com/ChromeDevTools/awesome-chrome-devtools 支持的語(yǔ)言和第三方庫(kù)。
Python的第三方庫(kù)
- Pychrome調(diào)用簡(jiǎn)單,但是版本較老,很久沒有維護(hù),(網(wǎng)捕手也集成這個(gè)庫(kù))
- Pyppeteer是用python改寫官方提供的js代碼,支持異步,使用廣泛容易被反爬策略識(shí)別。