探索Selenium的规避检测策略

本文介绍了在使用Selenium进行网页自动化测试时,如何通过设置随机User-Agent、修改window.navigator.webdriver值、调整窗口大小和位置、使用延时操作以及利用ChromeOptions禁用webdriver标志等方法来规避网站的监测机制。但要注意遵守法律和网站规定。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Selenium之规避检测

背景

​ 目前很多大网站有对selenium采取了监测机制。在正常情况下我们用浏览器访问相关网站的window.navigator.webdriver的值为 undefined或者为false。而使用selenium访问则该值为true。我们如何伪装,防止被检测出来呢?

在这里插入图片描述

​ 这是正常浏览器访问,接下来我们看一下selenium的。

在这里插入图片描述

​ 怎么样,是不是被检测出来呢 ?被检测出来的话,可能会不给你数据,弹出一些警告等等,会影响网页的布局等等

应对措施:

使用随机的User-Agent:

​ 网站通常会根据User-Agent标识来判断请求是否来自真实的浏览器。通过设置随机的User-Agent,可以模拟多种浏览器行为。

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
import random

# 创建浏览器对象
options = Options()
options.add_argument("--disable-blink-features=AutomationControlled")

# 设置随机User-Agent
user_agents = [
    "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.71 Safari/537.36",
    # 添加其他User-Agent...
]
options.add_argument(f"user-agent={random.choice(user_agents)}")

# 创建浏览器对象
driver = webdriver.Chrome(options=options)

​ 我们使用了Options对象来配置浏览器选项,通过add_argument()方法设置随机的User-Agent。您可以在user_agents列表中添加多个常见的浏览器User-Agent,然后使用random.choice()方法随机选择一个User-Agent作为请求头。

​ 当然我们也可以使用python自带的UA库,不需要自己找一些UA了。

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from fake_useragent import UserAgent

# 创建UserAgent对象
ua = UserAgent()

# 生成随机User-Agent
user_agent = ua.random

# 创建浏览器选项
options = Options()
options.add_argument(f"user-agent={user_agent}")

# 创建浏览器对象
driver = webdriver.Chrome(options=options)
设置窗口大小和位置

​ 有些网站可能会根据窗口的大小和位置来检测自动化行为。可以使用set_window_size()set_window_position()方法设置浏览器窗口的大小和位置。

# 设置窗口大小和位置
driver.set_window_size(1024, 768)
driver.set_window_position(0, 0)

​ 通过设置合理的窗口大小和位置,可以使浏览器窗口看起来更像是由真实用户操作的。

延时操作

​ 加适量的延时操作可以模拟人类用户的行为模式。

import time
import random

# 等待随机时间
time.sleep(random.uniform(1, 3))

# 执行点击操作
element.click()

# 等待一段时间
time.sleep(2)

​ 在执行某些操作之前等待一段随机的时间,或在执行点击操作后等待一小段时间,可以降低被检测的风险。

注入js脚本:

使用 execute_script() 方法修改 window.navigator.webdriver 的值。

from selenium import webdriver

# 创建浏览器对象
driver = webdriver.Chrome()

# 执行 JavaScript 代码修改 window.navigator.webdriver 的值
driver.execute_script("Object.defineProperty(navigator, 'webdriver', {get: () => undefined})")

# 打开网页
driver.get("https://www.taobao.com")

# 继续执行其他操作...

# 关闭浏览器
driver.quit()
```

​ 在上述代码中,我们使用 execute_script() 方法执行 JavaScript 代码来修改 window.navigator.webdriver 的值为 undefined,以欺骗网站的检测机制。

使用 ChromeOptions 添加 excludeSwitches 选项:

from selenium import webdriver
from selenium.webdriver.chrome.options import Options

# 创建浏览器选项
options = Options()

# 添加 excludeSwitches 选项,禁用 webdriver
options.add_experimental_option("excludeSwitches", ["enable-automation"])

# 创建浏览器对象
driver = webdriver.Chrome(options=options)

# 打开网页
driver.get("https://www.taobao.com")

# 继续执行其他操作...

# 关闭浏览器
driver.quit()

在上述代码中,我们使用 add_experimental_option() 方法添加 excludeSwitches 选项,并设置为 ["enable-automation"],以禁用 WebDriver,从而绕过网站的检测。

终极策略:
from selenium.webdriver import ActionChains
from selenium.webdriver import Chrome
from selenium.webdriver.chrome.options import Options

chrome_options = Options()
chrome_options.add_argument("--disable-blink-features=AutomationControlled")
driver = Chrome('./chromedriver',options=chrome_options)
with open('./stealth.min.js') as f:
    js = f.read()
#进行js注入
driver.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", {
  "source": js
})

driver.get('https://www.baidu.com')

大家如果想要这个js文件,可以上Github上找一下,这里我就分享了。

在这里插入图片描述

温馨提示:

​ 这些方法并不能保证适用于所有网站,因为不同的网站可能采取不同的检测机制。应该注意的是,规避网站的检测机制可能违反网站的使用条款或法律法规。在使用 Selenium 进行自动化脚本时,请确保遵守相关法律法规,并尊重网站的规则和限制。

### 问卷星自动化脚本编程实现方法 对于问卷星这类在线表单平台,利用Selenium或其他Web自动化工具可以实现一定程度上的自动化操作。然而,由于现代网站广泛采用反爬虫机制,直接通过模拟人类行为的方式可能会触发智能验证,从而阻碍正常流程[^1]。 #### 使用无头浏览器模式规避检测 一种常见的策略是在无头(headless)模式下运行浏览器实例。这种方式可以在不打开实际图形界面的情况下执行网页浏览任务,减少被识别为自动化程序的可能性。例如,在Python中配置ChromeDriver以启用此功能: ```python from selenium import webdriver from selenium.webdriver.chrome.options import Options chrome_options = Options() chrome_options.add_argument("--headless") # 启用无头模式 driver = webdriver.Chrome(options=chrome_options) url = 'https://www.wjx.cn/' driver.get(url) ``` #### 处理验证码挑战 针对可能出现的验证码问题,除了尝试绕过外,还可以考虑集成第三方服务来解析图像型或逻辑推理类验证码。不过需要注意的是,许多合法的服务条款禁止此类做法,因此务必遵循目标站点的规定并尊重其政策。 #### 数据抓取与分析 如果目的是收集已有的答卷数据而非提交新答案,则应优先探索API接口或者官方提供的导出选项。这不仅更加高效而且更符合道德规范。部分平台可能提供RESTful API用于访问调查结果;查阅文档了解是否有可用资源是非常重要的一步。 #### 遵守法律及伦理准则 值得注意的是,在开发任何涉及网络交互的应用时都应当严格遵守法律法规以及各平台的服务协议。未经授权的大规模数据采集活动可能导致法律责任风险增加。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

acmakb

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值