实际上,我们使用默认的方式初始化 WebDriver 打开一个网站,下面这段 JS 代码永远为 true,而手动打开目标网站的话,则为:undefined或false
<!DOCTYPE html>上面的代码如果手动打开浏览器执行是fasle,但是在selenium打开就是true,这就是别人能够识别我们在爬取信息,那么怎么将window.navigator.webdriver变成false呢?代码增加
<html>
<head>
<meta charset="UTF-8">
<script type="text/javascript">
document.write(window.navigator.webdriver )
</script>
<style>
</style>
</head>
<body>
</body>
</html>
browser.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", {完整可运行代码如下:
"source": """
Object.defineProperty(navigator, 'webdriver', {
get: () => undefined
})
"""
})
browser.implicitly_wait(10)
#!/usr/local/python3/bin/python3
# -*- coding: utf-8 -*
from selenium import webdriver
chromeOptions = webdriver.ChromeOptions()
# 打开参数
chromeOptions.add_experimental_option('excludeSwitches', ['enable-automation'])
chromeOptions.add_argument("--headless")
chromeOptions.add_argument("--remote-debugging-port=9222")
chromeOptions.add_argument('--no-sandbox')
browser = webdriver.Chrome('/usr/bin/chromedriver',chrome_options=chromeOptions)
#新增反爬识别
browser.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", {
"source": """
Object.defineProperty(navigator, 'webdriver', {
get: () => undefined
})
"""
})
browser.implicitly_wait(10)
browser.get("https://baidu.com")
网友回复