我在涉及到浏览器检测,反爬虫的时候,见识到了 disable-blink-features=AutomationControlled:禁用 blink 特征 这个是什么呢?
ChatGPT 说:
disable-blink-features=AutomationControlled 是一个 Chrome 启动选项,主要用于绕过浏览器对自动化工具(如 Selenium、Puppeteer 等)的检测。它作用于浏览器的 Blink 渲染引擎(Chrome 使用的渲染引擎)中的某些特性,具体来说,它与浏览器是否被自动化工具控制相关。
为什么需要禁用 `AutomationControlled`?
当你使用 Selenium 或其他浏览器自动化工具时,浏览器会暴露一些可以用来检测自动化行为的特征。例如:
navigator.webdriver
属性会被设置为true
,这个属性表示浏览器是在自动化控制下运行的。可以再- 浏览器的开发者工具(DevTools)可能显示一些信息,提示当前浏览器正在被自动化工具控制。
这些特征可能会被某些网站的反爬虫系统检测出来,从而阻止你执行自动化操作。
`disable-blink-features=AutomationControlled` 如何工作?
通过设置 disable-blink-features=AutomationControlled
,你禁用了浏览器的自动化控制检测功能,使得浏览器表现得更像是一个正常的用户操作,而不是自动化工具。这个选项会影响 Blink 渲染引擎中的一些检测机制,避免 navigator.webdriver
和其他自动化相关特征被暴露。
如何使用?
如果你使用 ChromeDriver 和 Selenium,可以在启动时通过以下方式配置 Chrome 启动选项:
python
复制代码
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
# 配置 ChromeOptions
chrome_options = Options()
chrome_options.add_argument("--disable-blink-features=AutomationControlled")
# 启动浏览器
driver = webdriver.Chrome(options=chrome_options)
# 打开目标页面
driver.get("https://example.com")
其他相关选项
除了 disable-blink-features=AutomationControlled
,还有一些其他常见的浏览器启动选项,可以帮助避免反爬虫检测:
--headless
:无头模式,不打开浏览器窗口。--no-sandbox
:禁用沙盒(有时需要在某些环境中使用,比如 CI/CD)。--disable-dev-shm-usage
:解决在某些环境中可能出现的共享内存问题。--disable-gpu
:禁用 GPU 加速。
总结
disable-blink-features=AutomationControlled
主要是用来隐藏浏览器中的一些自动化控制痕迹,帮助绕过反爬虫机制的检测。这在某些爬虫任务中非常有用,尤其是当目标网站采用了比较复杂的浏览器行为检测时。
接管已经打开的浏览器: 最为推荐的。
先打开一个浏览器,并开放监听端口:
chrome --remote-debugging-port=xxxx --user-data-dir = "d:\selenium"
然后selenium,指定要到这个浏览器开放的调试端口就行了
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
options = Options()
options.add_experimental_option("debuggerAddress", "127.0.0.1:xxxx")
driver = webdriver.Chrome(options=options)
driver.get('https://bot.sannysoft.com/')
selenium获取元素源码的几种方式
#1.获取外部源码
browser.get('https://www.baidu.com')
element_a = browser.find_element('a')
element_a.find_element('a')
#获取element中的源码
a_outer_html = element_a.get_attribute('outerHTML')
#2. 获取内部源码
a_inner_html = element_a.get_attribute('innerHTML')