问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

Selenium防止被反爬识别(关闭自动化控制标志)

创作时间:
作者:
@小白创作中心

Selenium防止被反爬识别(关闭自动化控制标志)

引用
1
来源
1.
https://www.cnblogs.com/stxz/p/18411331

在使用Selenium进行网页抓取时,WebDriver会向服务器发送信息以表明请求是自动化的。WebDriver被期望具有诸如window.navigator.webdriver之类的属性,这是W3C WebDriver规范所规定的,以便于进行更好的测试和作为一种安全功能。但是这会导致被Web服务器检测到,从而导致被标记或被拒绝访问。

随着execute_cdp_cmd(cmd, cmd_args)命令的可用性,现在可以使用Selenium轻松执行Google Chrome DevTools命令。这使得可以更改默认的标志。

问题描述

在默认情况下,当使用Selenium打开Chrome浏览器时,网站可以通过检查navigator.webdriver属性来判断是否为自动化工具。例如,访问bot.sannysoft.com时,会显示"Chrome正受到自动测试软件的控制"的提示。

from selenium import webdriver

driver = webdriver.Chrome()
driver.get('https://bot.sannysoft.com/') 

解决方案

为了隐藏自动化工具的身份,可以通过以下步骤来修改Chrome的设置:

  1. 创建ChromeOptions实例并添加必要的参数
  2. 使用JavaScript代码将navigator.webdriver属性值更改为undefined

以下是具体的Python代码实现:

from selenium import webdriver

# 创建一个Chromeoptions实例
options = webdriver.ChromeOptions()

# 添加一个参数来禁用“AutomationControlled”标志
options.add_argument("--disable-blink-features=AutomationControlled")

# Exclude the collection of enable-automation switches
options.add_experimental_option("excludeSwitches", ["enable-automation"])

# 关闭 userAutomationExtension
options.add_experimental_option("useAutomationExtension", False)

# 创建chrome的webDriver
driver = webdriver.Chrome(options=options)

# 重要!!将webdriver的navigator值属性更改为undefined
driver.execute_script("Object.defineProperty(navigator, 'webdriver', {get: () => undefined})")

driver.get('https://bot.sannysoft.com/') # 注意该网站需梯子才能打开

通过上述设置,再次访问bot.sannysoft.com时,将不会显示"Chrome正受到自动测试软件的控制"的提示。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号