# Selenium Python (3)。如何使用 Python 绕过 Selenium 检测：用户代理和后台执行

了解如何使用 Python、用户代理和后台执行绕过自动浏览检测。提升您的网页抓取和自动化技能。

- 作者: [Brandon Perry](https://fineproxy.org/cn/brandon-perry/)
- 发布于: 2024-06-03T11:05:26.000Z
- 已更新: 2024-05-27T11:43:25.000Z
- 规范网址: https://fineproxy.org/cn/selenium-python-3-how-to-bypass-selenium-detection-using-python-user-agents-and-background-execution/

网络抓取和浏览器自动化已成为许多企业和开发人员不可或缺的一部分。然而，现在许多网站都会检测并阻止自动浏览。本文将探讨如何通过操纵用户代理并在后台运行 Selenium，使用 Python 绕过 Selenium 检测。我们将深入介绍详细的步骤、工具和最佳实践，以确保成功进行网络抓取。

## 了解硒检测

在绕过检测之前，让我们先了解一下它的工作原理。网站可以通过检查某些 Web 驱动程序标志和属性是否存在来检测 Selenium。当网站识别出这些标志时，它可以阻止访问或显示误导性数据。例如，当您使用标准 Chrome 浏览器打开网站时，它会按预期响应。但是，当您使用 Selenium 打开同一个网站时，网站可以检测到自动化并将其阻止。之所以发生这种检测，是因为 Selenium 设置了网站可以查找的特定标志。

## 更改 WebDriver 标志

要绕过 Selenium 检测，一种有效的方法是修改 WebDriver 标志。

1.  **Firefox 配置**：输入以下命令打开 Firefox 配置页面 `about:config` 在地址栏中。找到与 WebDriver 相关的标志并将其设置为 `false`.
2.  **代码实现**:

```python
from selenium import webdriver

# Set Firefox preferences
options = webdriver.FirefoxOptions()
options.set_preference("dom.webdriver.enabled", False)
options.set_preference('useAutomationExtension', False)

driver = webdriver.Firefox(options=options)
```

该脚本禁用WebDriver检测标志，使浏览器看起来像常规的用户驱动实例。

## 用户代理

用户代理是浏览器发送给 Web 服务器以标识自身的字符串。更改用户代理字符串可能会使 Selenium 请求与常规浏览器请求难以区分。

**更改用户代理的步骤**:

1.  **识别常见的用户代理字符串**： 例子： `"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36"`
2.  **在 Selenium 中实现变更**:

```python
from selenium import webdriver

options = webdriver.ChromeOptions()
options.add_argument("user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36")

driver = webdriver.Chrome(options=options)
```

通过设置自定义用户代理，我们可以绕过许多基本检测。

## 在后台运行 Selenium

在后台运行浏览器是逃避检测的另一个重要方面。这可以通过在无头模式下运行浏览器来实现。

**实施方案**:

```python
from selenium import webdriver

options = webdriver.ChromeOptions()
options.add_argument("--headless")

driver = webdriver.Chrome(options=options)
```

在无头模式下运行意味着不显示图形界面，这对于在服务器上运行自动化任务至关重要。

## 禁用浏览器通知和声音

自动浏览通常涉及处理意外弹出窗口和通知。禁用这些可以简化流程。

**代码示例**:

```python
from selenium import webdriver

options = webdriver.ChromeOptions()
prefs = {"profile.default_content_setting_values.notifications": 2}
options.add_experimental_option("prefs", prefs)
options.add_argument("--mute-audio")

driver = webdriver.Chrome(options=options)
```

该脚本禁用通知并静音，确保不间断的自动化。

## 解析数据示例

让我们考虑一个从生成随机用户名的网站解析昵称的实际例子。

**步骤**:

1.  **加载网站并与元素交互**:

```python
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys

options = webdriver.ChromeOptions()
options.add_argument("--headless")
options.add_argument("user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36")

driver = webdriver.Chrome(options=options)
driver.get("https://example.com")

# Locate the username field and extract nicknames
usernames = []
for _ in range(10):
    nickname = driver.find_element(By.ID, "nickname").text
    usernames.append(nickname)
    driver.find_element(By.ID, "generate").click()
print(usernames)
```

## 总结

通过操纵 WebDriver 标志、更改用户代理、在后台运行 Selenium 以及禁用浏览器通知，您可以有效地绕过 Selenium 检测。这些技术对于无缝且未被检测到的 Web 抓取和自动化至关重要。实施这些方法可确保您的自动化任务保持不间断和高效。请记住始终合乎道德地使用 Web 抓取和自动化，尊重网站服务条款和数据隐私法。如需更多高级技术和定期更新，请继续关注我们在 FineProxy.org 上的博客。欢迎在下面的评论中分享您的想法和反馈。如果您喜欢这篇文章，请不要忘记订阅我们的频道并留下点赞。祝您抓取愉快！

通过执行这些步骤并根据需要调整设置，您可以确保您的自动化项目顺利运行且不被发现。
