网络抓取和浏览器自动化已经成为 不可或缺的 适用于许多企业和开发人员。但是,现在许多网站都会检测并阻止自动浏览。本文将探讨如何绕过 硒 通过操纵用户代理并在后台运行 Selenium,使用 Python 实现检测。我们将深入介绍详细的步骤、工具和最佳实践,以确保成功进行网页抓取。
了解硒检测
在绕过检测之前,让我们先了解一下它的工作原理。网站可以通过检查某些 Web 驱动程序标志和属性是否存在来检测 Selenium。当网站识别出这些标志时,它可以阻止访问或显示误导性数据。例如,当您使用标准 Chrome 浏览器打开网站时,它会按预期响应。但是,当您使用 Selenium 打开同一个网站时,网站可以检测到自动化并将其阻止。之所以发生这种检测,是因为 Selenium 设置了网站可以查找的特定标志。
更改 WebDriver 标志
要绕过 Selenium 检测,一种有效的方法是修改 WebDriver 标志。
- Firefox 配置:输入以下命令打开 Firefox 配置页面
about:config
在地址栏中。找到与 WebDriver 相关的标志并将其设置为false
. - 代码实现:
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 请求与常规浏览器请求难以区分。
更改用户代理的步骤:
- 识别常见的用户代理字符串: 例子:
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36"
- 在 Selenium 中实现变更:
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
在后台运行浏览器是逃避检测的另一个重要方面。这可以通过在无头模式下运行浏览器来实现。
实施情况:
from selenium import webdriver
options = webdriver.ChromeOptions()
options.add_argument("--headless")
driver = webdriver.Chrome(options=options)
在无头模式下运行意味着不显示图形界面,这对于在服务器上运行自动化任务至关重要。
禁用浏览器通知和声音
自动浏览通常涉及处理意外弹出窗口和通知。禁用这些可以简化流程。
代码示例:
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)
该脚本禁用通知并静音,确保不间断的自动化。
解析数据示例
让我们考虑一个从生成随机用户名的网站解析昵称的实际例子。
阶梯:
- 加载网站并与元素交互:
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 抓取和自动化,尊重网站服务条款和数据隐私法。有关更多高级技术和定期更新,请继续关注我们的博客 罚款代理.org。欢迎在下面的评论中分享您的想法和反馈。如果您喜欢这篇文章,请不要忘记订阅我们的频道并留下赞。祝您抓取愉快!
通过执行这些步骤并根据需要调整设置,您可以确保您的自动化项目顺利运行且不被发现。
评论 (0)
这里还没有评论,你可以成为第一个评论者!