最近做一个爬虫项目,是通过selenium模拟浏览器进行爬取的,当启用chromedriver无头模式时就会无法正常访问,按照网上的方法隐藏了一些chromedriver的特征码还是无法访问。
通过网上资料发现,实际上Selenium 启动的浏览器,有几十个特征可以被网站通过 JavaScript 探测到。可以通过访问https://bot.sannysoft.com/进行测试。
正常通过浏览器访问该网站,结果如图:
通过Selenium Chromedriver 无头模式(--headless)打开该网站,结果如图:
在Chromedriver的headless模式下面,如何才能全部隐藏这些特征呢?
我在网上找到了一个stealth.min.js文件可以隐藏这些特征,这个文件的生成方式可以参考,github地址是https://github.com/berstend/puppeteer-extra/tree/master/packages/extract-stealth-evasions
具体的使用方法如下:
# -*- coding: utf-8 -*- """ :author: 阿汤博客 :Description: selenium chromedriver 特征码隐藏 :CreateTime: 2022-05-10 17:02:05 """ import time from selenium.webdriver import Chrome from selenium.webdriver.chrome.options import Options chrome = Options() chrome.add_argument('--headless') chrome.add_argument('user-agent=Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.71 Safari/537.36') chrome.add_argument('--disable-gpu') chrome.add_argument('--no-sandbox') browser = Chrome(options=chrome) with open('./stealth.min.js') as f: js = f.read() browser.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", { "source": js }) browser.get('https://bot.sannysoft.com/') time.sleep(1) # 保存为图片 browser.save_screenshot('atang.png') # 可以保存源代码为 html 再双击打开,查看完整结果 source = browser.page_source with open('atang.html', 'w') as f: f.write(source)
运行代码查看atang.png:
再查看atang.html文件:
发现和我们通过浏览器访问https://bot.sannysoft.com/结果一致了。
如果觉得stealth.min.js文件自己生成麻烦,可以直接访问我的网盘获取,我已经生成好了。