一、代码
from selenium import webdriver
options = webdriver.EdgeOptions()
options.add_argument("disable-blink-features=AutomationControlled")
driver = webdriver.Edge(options=options)
driver.execute_cdp_cmd(
cmd_args={'source': 'console.log = () => {}'},
cmd="Page.addScriptToEvaluateOnNewDocument",
)
driver.get("https://demo.waf-ce.xxx.cn:10081/hello.html")
while True: pass
二、原理解释
段代码是用 Selenium 自动化工具结合 Microsoft Edge 浏览器(基于 Chromium 的 Edge 浏览器)编写的脚本,目的是:
- 通过 Selenium 启动 Edge 浏览器。
- 尝试隐藏 Selenium 的自动化特征,避免被检测为机器人。
- 打开一个指定的网页(https://demo.waf-ce.xxx.cn:10081/hello.html)。
- 代码执行后,进入死循环,使浏览器保持打开状态。
以下是具体代码的解释:
1、创建 Edge 浏览器的选项
options = webdriver.EdgeOptions()
options.add_argument("disable-blink-features=AutomationControlled")
- webdriver.EdgeOptions():创建一个专门用于配置 Edge 浏览器的选项对象。
- options.add_argument(“disable-blink-features=AutomationControlled”):
- 添加启动时的浏览器参数。
- “disable-blink-features=AutomationControlled” 是一个常见的参数,用于禁用 Chromium 浏览器的 AutomationControlled 特性。
- 这个特性会让网站检测到浏览器是由自动化工具(如 Selenium)控制的,而加入该参数可以绕过一些简单的检测机制,伪装成普通用户使用的浏览器。
2、启动浏览器并尝试修改 JS 环境
driver = webdriver.Edge(options=options)
driver.execute_cdp_cmd(
cmd_args={'source': 'console.log = () => {}'},
cmd="Page.addScriptToEvaluateOnNewDocument",
)
- webdriver.Edge(options=options):使用上面配置的选项启动一个 Edge 浏览器实例。
- driver.execute_cdp_cmd():
- 这是 Selenium 提供的一种方法,允许通过 CDP(Chrome DevTools Protocol) 执行低级别的浏览器命令。
- cmd=“Page.addScriptToEvaluateOnNewDocument”:
- 表示要在每个新页面加载前注入一段 JavaScript 脚本。
- cmd_args={‘source’: ‘console.log = () => {}’}:
- 表示注入的脚本是:console.log = () => {}。
- 该脚本覆盖了浏览器环境中的 console.log 函数,使其变成一个空函数。
- 这样,任何试图通过控制台打印日志的行为都会被禁用。
- 是为了防止某些反自动化工具通过 console.log 检测出浏览器是由 Selenium 控制的。
3、 打开目标网页
driver.get("https://demo.waf-ce.xxx.cn:10081/hello.html")
- 通过 driver.get() 方法,打开指定的网页:https://demo.waf-ce.xxx.cn:10081/hello.html。
- 这是一个测试网页(从 URL 看出它是一个 Web 应用防火墙(WAF)相关的测试页面)。
4、保持浏览器运行
while True: pass
- while True: pass:让 Python 程序进入一个死循环,使浏览器保持打开状态,不会立即关闭。
- 如果没有这个循环,程序执行完毕后会自动退出,浏览器也会关闭。
三、总结
这段代码的核心目的是:
- 打开一个指定的测试页面。
- 尝试隐藏 Selenium 的自动化特征,绕过一些反自动化检测机制。