- 有小伙伴说使用selenium没能绕过机器人检测,盘他。
一、selenium简介
- Selenium 是一个强大的工具,用于Web浏览器自动化,更常被用于爬虫
- 但selenium需要通过webdriver来驱动chrome,每次运行selenium时,都要先找到对应版本的chromedriver.exe。
- chromedriver自动化会对浏览器的部分属性进行修改,非常容易被识别为机器人。
- pypeeteer却没有这种烦恼,它不需要中间驱动,所以还是建议大家使用pyppeteer。但如果你已经写了上万行selenium代码了,那还是编译一个驱动吧。
二、机器人识别网站
- 1.https://www.browserscan.net/bot-detection

- 1.https://www.browserscan.net/bot-detection

三、检测原理
let regex = /^([a-z]){3}_.*_(Array|Promise|Symbol|JSON|Object|Proxy)$/;
let allProps = Object.getOwnPropertyNames(window);
let filteredProps = allProps.filter(prop => regex.test(prop));
console.log(filteredProps);
[]
(6) ['cdc_adoQpoasnfa76pfcZLmcfl_Array', 'cdc_adoQpoasnfa76pfcZLmcfl_Object',
'cdc_adoQpoasnfa76pfcZLmcfl_Promise', 'cdc_adoQpoasnfa76pfcZLmcfl_Proxy',
'cdc_adoQpoasnfa76pfcZLmcfl_Symbol', 'cdc_adoQpoasnfa76pfcZLmcfl_JSON']

四、编译crhomedriver.exe
- 打开chromium源码文件:
\chrome\test\chromedriver\chrome\devtools_client_impl.cc
1.找到:
std::string script =
"(function () {"
"window.cdc_adoQpoasnfa76pfcZLmcfl_Array = window.Array;"
"window.cdc_adoQpoasnfa76pfcZLmcfl_Object = window.Object;"
"window.cdc_adoQpoasnfa76pfcZLmcfl_Promise = window.Promise;"
"window.cdc_adoQpoasnfa76pfcZLmcfl_Proxy = window.Proxy;"
"window.cdc_adoQpoasnfa76pfcZLmcfl_Symbol = window.Symbol;"
"window.cdc_adoQpoasnfa76pfcZLmcfl_JSON = window.JSON;"
"}) ();";
params.Set("source", script);
2.替换为:
std::string script =
"(function () {"
"}) ();";
params.Set("source", script);
3.编译:
ninja -C out/Default chromedriver
五、验证
- 将生成的chromedriver.exe拿过来,运行下面的python代码:
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
import time
s = Service(r"chromedriver.exe")
chrome_options = webdriver.ChromeOptions()
chrome_options.binary_location = r"C:\Users\Administrator\AppData\Local\Chromium\Application\chrome.exe"
chrome_options.add_argument("--no-sandbox")
chrome_options.add_argument("--fingerprints=11111111")
driver = webdriver.Chrome(service=s, options=chrome_options)
driver.delete_all_cookies()
driver.get("https://fingerprintjs.github.io/BotD/main/")
time.sleep(99999)

六、成品
- 我还是建议小伙伴们自己把流程全部跑一边,编译个自己的指纹浏览器和驱动。
- 懒的小伙伴还是直接买成品。链接:[https://dwz.cn/KOweICeK]。之前买过的,联系我拿更新。(https://dwz.cn/KOweICeK)
- 还有,再次感谢小伙伴们的建议和红包鼓励。