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

在使用Selenium进行网页抓取时,WebDriver会向服务器发送信息以表明请求是自动化的。

WebDriver被期望具有诸如window.navigator.webdriver之类的属性,这是W3C WebDriver规范所规定的,以便于进行更好的测试和作为一种安全功能。但是这会导致被Web服务器检测到,从而导致被标记或被拒绝访问。

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

1. 会显示【chrome正受到自动测试软件的控制】的代码:

# 会显示【chrome正受到自动测试软件的控制】
from selenium import webdriver
# 创建chrome的webDriver
driver = webdriver.Chrome()
driver.get('https://bot.sannysoft.com/') # 注意该网站需梯子才能打开

显示如下:

2. 不会显示【chrome正受到自动测试软件的控制】的代码:

# 不会显示【chrome正受到自动测试软件的控制】
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/') # 注意该网站需梯子才能打开

显示如下:
image

posted @ 2024-09-12 23:29  水天需  阅读(46)  评论(0编辑  收藏  举报