WebDriver 检测
对于使用 Selenium 等自动化工具进行网页抓取或测试的开发人员来说,WebDriver 检测已成为一个常见挑战。网站已实施通过识别 WebDriver 签名来检测和阻止自动浏览的机制。以下是 WebDriver 检测概述和避免它的策略,以及与测试中的 WebDriver 相关的关键概念。
测试中的 WebDriver 是什么?
WebDriver 是 Web 测试自动化中必不可少的工具。它为开发人员提供了一种以编程方式控制 Web 浏览器的方法,使他们能够模拟用户操作,例如单击按钮、输入文本以及在网页之间导航。WebDriver 可以与不同的浏览器(例如 Chrome、Firefox)一起使用,并与 Selenium 等测试框架集成。
WebDriver 做什么?
WebDriver 通过向浏览器发送命令来自动与网页进行交互。它复制用户行为,例如:
- 导航至 URL
- 与网络元素(按钮、文本字段等)交互
- 处理表单和用户输入
- 管理浏览器 cookie 和会话
WebDriver 如何帮助测试?
WebDriver 用于在测试期间自动执行浏览器操作,确保网站或应用程序在不同浏览器和设备上的行为符合预期。它允许进行回归测试、功能测试和性能测试。
避免 WebDriver 检测
许多网站都实施了检测 WebDriver 的机制,以防止机器人和自动抓取工具。以下是一些避免 WebDriver 检测的技术:
- 修改 WebDriver 签名
运行 WebDriver 或 Selenium 的浏览器可以通过其浏览器设置中的特定签名进行检测(例如,将navigator.webdriver设置为true )。修改或隐藏这些签名可以防止被检测到。
- 在 Chrome 中,可以使用扩展或命令行标志来隐藏 WebDriver 签名。
- JavaScript 执行:诸如Object.defineProperty(navigator, 'webdriver', {get: () => undefined})之类的脚本可以帮助删除将浏览器标记为自动化的标志。
- 使用反检测浏览器工具
反检测浏览器或Multilogin之类的工具可以掩盖浏览器指纹,并使 Selenium 驱动的浏览器看起来像真正的用户会话。
- 随机化浏览器操作
使用可预测的模式(例如操作之间的固定延迟或重复的浏览模式)自动执行任务可以简化检测。在浏览器交互中引入随机性(例如不同的延迟、使用随机鼠标移动和模拟类似人类的行为)可以降低被发现的机会。
- 谨慎使用无头浏览器
无头浏览器(运行时没有可见 UI 的浏览器)通常会因为在无头模式下运行时的独特浏览器行为而被检测到。要避免被检测到,请执行以下操作:
- 使用命令行参数来模拟非无头浏览器行为(例如,Chrome 的–window-size标志)。
- 设置用户代理字符串来模拟典型的浏览器。
- 代理和 IP 轮换
网站可以通过检测来自同一 IP 地址的重复请求来阻止机器人。使用轮换代理或 VPN 可以帮助掩盖 IP 并将请求分发到更大范围的地址。
WebDriver 检测中的常见挑战
Chrome 中的 WebDriver 检测
Google Chrome 包含检测 WebDriver 使用情况的机制。navigator.webdriver属性通常用于识别 Selenium 自动化。禁用此标志并使用其他混淆技术(例如修改 HTTP 标头或模仿人类行为)可以帮助绕过检测。
Python 中的 WebDriver 检测
Python 的 Selenium 库通常用于 Web 自动化。检测到类似机器人行为的网站可能会标记基于 Python Selenium 的脚本。要避免检测,请执行以下操作:
- 使用未检测的 chromedriver包,它提供了一个可以绕过检测的修改后的 ChromeDriver。
- 随机化交互(例如,随机鼠标移动和点击延迟)以使机器人看起来更像人类。
GitHub 和开源工具
GitHub 上有多个开源工具和存储库,旨在避免 WebDriver 检测。其中包括修改浏览器签名、绕过检测和模仿人类浏览模式的解决方案。
如何让无头浏览器无法被检测到
无头浏览器(例如以无头模式运行的 Chrome 或 Firefox)通常会因为特定浏览器属性与正常浏览会话不同而被检测到。以下是使用无头浏览器时避免被检测到的方法:
- 使用浏览器参数模拟常规浏览。例如,在 Chrome 中,使用–window-size 、–disable-gpu和–disable-blink-features=AutomationControlled可以帮助防止检测。
- 通过添加鼠标移动、按键和滚动来模仿用户行为,以模拟真实的交互。
- 修改浏览器设置以隐藏浏览器在无头模式下运行的事实。更改navigator.webdriver等属性并确保浏览器的渲染行为与常规浏览器一致是关键。
如何停止 Selenium WebDriver
可以通过各种命令来停止或退出 Selenium WebDriver,具体取决于所使用的编程语言:
- 在 Python 中:使用driver.quit()关闭浏览器并停止 WebDriver 会话。
- 在 Java 中:调用driver.quit()来终止 WebDriver 实例。
停止 WebDriver 对于释放资源和防止自动化测试期间的内存泄漏至关重要。
重点
WebDriver 检测已成为 Selenium 等自动化工具的一大障碍。避免检测需要谨慎的策略,包括隐藏 WebDriver 签名、随机化浏览器交互以及使用代理或 VPN。
undetected-chromedriver和 anti-detect browsers等工具为克服检测挑战提供了额外的解决方案。了解这些方法及其在浏览器自动化中的应用对于有效且不可检测的网页抓取或测试至关重要。
人们还问
为了避免被 Selenium 检测到,请随机化您的操作、隐藏webdriver标志、使用反检测浏览器并模拟真实用户行为。此外,轮换代理和使用未检测到的驱动程序(如未检测到的chromedriver )有助于绕过机器人检测系统。
WebDriver 是一种用于自动化 Web 浏览器的工具。在测试中,WebDriver 模拟用户交互,允许开发人员对网站和 Web 应用程序进行自动化测试,以确保它们正常运行。
Selenium 中的 WebDriver 方法可自动与 Web 浏览器进行交互,允许您导航到网页、与元素交互以及运行脚本作为自动化测试套件的一部分。
要检查元素在 Selenium 中是否可见,可以使用Python 中的is_displayed ()方法或Java 中的isDisplayed ()方法。如果元素在网页上可见,这些方法将返回True 。
为了使无头浏览器无法被检测到,可以通过修改浏览器标志、随机化用户交互和伪装 WebDriver 签名来模仿正常浏览器的行为。