用 selenium
有很多种被别的平台侦测出的办法,所以,这一篇讲讲述,如何隐藏 selenium
的各种特性。
有些网址通过 webdriver
检测使得 Selenium
无法获取元素、无法控制按钮等情况
参考资料
普通浏览器打开
一般来说,点击
会出现下面
webdriver 打开
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| from selenium import webdriver
class WebDriverChrome(object):
def __init__(self): self.driver = self.StartWebdriver()
def StartWebdriver(self): options = webdriver.ChromeOptions() options.add_argument("start-maximized") options.add_experimental_option("excludeSwitches", ["enable-automation"]) options.add_experimental_option("useAutomationExtension", False) driver = webdriver.Chrome(options=options) return driver
def RunStart(self): self.driver.get('https://bot.sannysoft.com')
if __name__ == '__main__': Crawl = WebDriverChrome() Crawl.RunStart()
|
出现
Js注入真正绕过webdriver的检测属性
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
| from selenium import webdriver
class WebDriverChrome(object):
def __init__(self): self.driver = self.StartWebdriver()
def StartWebdriver(self): options = webdriver.ChromeOptions() options.add_argument("start-maximized") options.add_experimental_option("excludeSwitches", ["enable-automation"]) options.add_experimental_option("useAutomationExtension", False) driver = webdriver.Chrome(options=options) with open('./stealth.min.js') as f: js = f.read() driver.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", { "source": js }) return driver
def RunStart(self): self.driver.get('https://bot.sannysoft.com')
if __name__ == '__main__': Crawl = WebDriverChrome() Crawl.RunStart()
|
stealth.min.js 生成
安装node.js
npx extract-stealth-evasions
就会在你执行命令的文件夹下面生成一个 stealth.min.js
文件
这里我提供一下下载方式。
下载 stealth.min.js
ps: 除了使用 js 注入之外, chrome 还提供很多参数,来隐藏,来达到相同的效果,具体可以参考