selenium 跟 undetected chromedriver 還有 nodriver 實際執行上有什麼差別

selenium 跟 undetected chromedriver 幾乎是一樣的東西,使用方法也一樣,主要差別的是否容易被檢測的出來是程式(機器人)在操作瀏覽器。


selenium

官網:
https://www.selenium.dev/documentation/webdriver

github:
https://github.com/SeleniumHQ/selenium

官方簡介:
A browser automation framework and ecosystem.


undetected chromedriver

官網:
https://github.com/ultrafunkamsterdam/undetected-chromedriver/

官方簡介:
Custom Selenium Chromedriver | Zero-Config | Passes ALL bot mitigation systems (like Distil / Imperva/ Datadadome / CloudFlare IUAM)

在使用 selenium 去控制 chrome extension 的時候, selenium 是只接受 zip 的檔案格式,而 undetected chromedriver 去載入 chrome extension 只能接受非壓縮的格式。

非壓縮檔的好處,是方便 python 程式與 chrome extension 的 javascript 溝通,zip 也是可以,需要多一個打包 zip 的動作,才能把檔案動態放進 zip 檔。


nodriver

官網:
https://github.com/ultrafunkamsterdam/nodriver

官方簡介:
Successor of Undetected-Chromedriver. Providing a blazing fast framework for web automation, webscraping, bots and any other creative ideas which are normally hindered by annoying anti bot systems like Captcha / CloudFlare / Imperva / hCaptcha

nodriver 和 selenium 是類似的工具,但寫法完全不相容,nodriver 是目前少數可以不被 CloudFlare 檢查出來的網頁自動化工具。

nodriver 不需要使用 chrome webdriver, 即可控制 chrome 瀏覽器。但限制只能控制 chrome 瀏覽器。selenium 優點是可以用到 edge / brave / chrome, 也有支援 firefox 和 safari 瀏覽器。

完整性來說,nodriver 很多地方沒有 selenium 完整,但大多情況下算是夠用。

穩定性來說,目前可能還在初期的 beta 階段,穩定性較 selenium 差,可能在特定的操作下,會讓瀏覽器掛掉,或使用超級多的記憶體之類的,大致上,算好用,穩定性可以接受。

nodriver 可以比 selenium 還控制到更多chrome 的細部參數,因為nodriver可以存取到更多 chrome 低層的資訊。


DrissionPage

官網:
https://github.com/g1879/DrissionPage/

官方簡介:
基於python的網頁自動化工具。既能控制瀏覽器,也能收發數據包。可兼顧瀏覽器自動化的便利性和requests的高效率。功能強大,內置無數人性化設計和便捷功能。語法簡潔而優雅,代碼量少。

DrissionPage 類似 nodriver, 但操作的語法也和 nodriver 不相容,寫法和 selenium 也完全不相容,DrissionPage 也是目前少數可以不被 CloudFlare 檢查出來的網頁自動化工具。


Javascript / jQuery

使用 jQuery / javascript 來自動化網頁操作,大多會寫成 chrome extension.

Chrome 官方學習資源:
https://developer.chrome.com/extensions


Case Study

以對某一個按鈕自動點擊來說:

jQuery:

$('selector').click()

$('selector').trigger("click");

selenium / undetected chromedriver:

element = driver.find_element(By.CSS_SELECTOR, your_selector)
element.click()

nodriver:

element = await tab.query_selector(your_selector)
await element.click()

更詳細說明:
要怎麼讓 chrome extension 裡的 javascript/jquery 的 click 可以比照真人去點擊?
https://stackoverflow.max-everyday.com/2024/10/chrome-extension-javascript-click-with-event-which/

影片示範:https://youtu.be/JADu32c01sE

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *