针对网站开发者的问答网站,自建站有哪些,怎么做网站排版,购物小程序开发公司文章目录 专栏导读1.问题解析2.代码解析(Edge/Chrome通用)2.1 设置Edge浏览器选项:2.2 尝试启用后台模式2.3 排除启用自动化模式的标志2.4 禁用自动化扩展2.5 设置用户代理2.6 实例化浏览器驱动对象并应用配置2.7 在页面加载时执行JavaScript代码 3.完整代码#xff08;可直接… 文章目录 专栏导读1.问题解析2.代码解析(Edge/Chrome通用)2.1 设置Edge浏览器选项:2.2 尝试启用后台模式2.3 排除启用自动化模式的标志2.4 禁用自动化扩展2.5 设置用户代理2.6 实例化浏览器驱动对象并应用配置2.7 在页面加载时执行JavaScript代码 3.完整代码可直接复制使用 专栏导读 ✍ 作者简介i阿极CSDN 数据分析领域优质创作者专注于分享python数据分析领域知识。 ✍ 其他专栏《数据分析案例》 《机器学习案例》 如果觉得文章不错或能帮助到你学习可以点赞收藏评论关注哦 1.问题解析
对于selenium模拟网页登录被检测到的原因很多博主大佬对此都有其解释。这里就不再阐述。 但是为了让本博主和小伙伴们方便并快速找到原因以下是AI给出的答案 使用Selenium爬虫被检测到的原因主要有以下几点 请求头信息差异 默认请求头差异Selenium在默认情况下发送的请求头信息与真实浏览器略有不同这可能导致服务器识别出非人类访问。例如Selenium的WebDriver在发送请求时可能会包含特定的标识如window.navigator.webdriver这些标识可以被网站用来检测是否使用了自动化工具。 可定制性不足虽然Selenium允许自定义请求头但相比真实浏览器其请求头可能缺乏足够的“人性化”信息如referer字段、用户代理User-Agent字符串的多样性等。访问模式异常 访问频率过高Selenium爬虫通常具有较高的访问频率这与人类用户的访问行为存在显著差异。如果爬虫在短时间内对同一网站进行大量请求很容易被服务器识别为异常行为。 行为模式固定由于Selenium爬虫是程序化操作其行为模式相对固定如固定的点击顺序、输入速度等这与人类用户的随机性操作形成对比增加了被检测的风险。浏览器指纹差异 浏览器指纹每个浏览器都有其独特的指纹信息包括操作系统、浏览器版本、插件列表等。Selenium爬虫通常使用单一的浏览器配置进行大量请求这可能导致其浏览器指纹与大多数真实用户不同从而被网站识别。其他反爬虫机制 IP地址限制如果Selenium爬虫频繁使用同一IP地址进行访问该IP地址可能会被网站加入黑名单从而限制或封禁其访问。 Cookie验证部分网站在登录后会在每个请求中要求携带相关的Cookie信息如果Selenium爬虫无法正确处理这些Cookie也可能导致被检测。应对措施 为了减少Selenium爬虫被检测的风险可以采取以下措施 自定义请求头尽可能模拟真实浏览器的请求头信息包括User-Agent、referer等字段。 设置合理的访问间隔在请求之间设置随机间隔时间模拟人类的自然访问规律。 使用代理IP通过代理IP进行访问隐藏真实的IP地址避免被服务器封禁。 修改WebDriver属性通过修改Selenium WebDriver的默认属性如禁用window.navigator.webdriver标识减少被检测的风险。 模拟用户行为在爬虫中加入模拟用户行为的元素如随机点击、滚动页面等使爬虫行为更接近真实用户。 2.代码解析(Edge/Chrome通用)
2.1 设置Edge浏览器选项:
option webdriver.EdgeOptions()这行代码创建了一个EdgeOptions对象该对象用于配置Microsoft Edge浏览器的启动选项。这是在使用Selenium与Edge浏览器交互时的第一步。
2.2 尝试启用后台模式
option.add_experimental_option(detach, True)这行代码尝试通过添加实验性选项detach并设置为True来让浏览器在后台运行。然而需要注意的是detach并不是Selenium官方支持的Edge浏览器选项且其效果可能因Selenium版本和浏览器实现而异。在某些情况下这个选项可能不起作用或不被识别。
2.3 排除启用自动化模式的标志
option.add_experimental_option(excludeSwitches, [enable-automation])这行代码通过添加实验性选项excludeSwitches并传入一个包含enable-automation的列表来尝试隐藏自动化痕迹。enable-automation是一个Chrome及可能也适用于Edge因为它们共享很多相同的命令行选项的标志用于启用自动化模式该模式可能会改变浏览器的行为或允许网站检测到自动化。
2.4 禁用自动化扩展
option.add_experimental_option(useAutomationExtension, False)这行代码通过设置useAutomationExtension为False来禁用Selenium的自动化扩展。这个扩展可能会暴露Selenium的存在从而被网站检测到。
2.5 设置用户代理
option.add_argument( User-AgentMozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36 Edg/118.0.2088.46)这行代码通过add_argument方法添加一个命令行参数来设置浏览器的用户代理User-Agent。用户代理是一个在HTTP请求中发送的头部用于告诉服务器客户端的操作系统、浏览器版本等信息。这里设置为一个模拟Chrome浏览器的用户代理以尝试绕过一些基于用户代理的检测。
2.6 实例化浏览器驱动对象并应用配置
driver webdriver.Edge(optionsoption)这行代码使用之前配置的EdgeOptions对象option来实例化一个Edge浏览器的WebDriver对象。这个WebDriver对象将用于控制Edge浏览器进行自动化测试或爬虫操作。
2.7 在页面加载时执行JavaScript代码
driver.execute_cdp_cmd(Page.addScriptToEvaluateOnNewDocument, { source: Object.defineProperty(navigator, webdriver, { get: () undefined })
})这行代码使用Chrome DevTools ProtocolCDP的Page.addScriptToEvaluateOnNewDocument命令来在页面加载时自动执行一段JavaScript代码。这段代码通过Object.defineProperty方法重写了navigator.webdriver属性使其getter函数返回undefined。这样做可以隐藏Selenium的存在因为一些网站可能会通过检查navigator.webdriver属性来判断是否在使用自动化工具。这是绕过网站自动化检测的一种常用方法。
3.完整代码可直接复制使用
option webdriver.EdgeOptions()
option.add_experimental_option(detach, True)
option.add_experimental_option(excludeSwitches, [enable-automation])
option.add_experimental_option(useAutomationExtension, False)
option.add_argument(User-AgentMozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36 Edg/118.0.2088.46)
# 实例化浏览器驱动对象并将配置浏览器选项
driver webdriver.Edge(optionsoption)
driver.execute_cdp_cmd(Page.addScriptToEvaluateOnNewDocument, {source: Object.defineProperty(navigator, webdriver, {get: () undefined})
})文章下方有交流学习区一起学习进步 首发CSDN博客创作不易如果觉得文章不错可以点赞收藏评论 你的支持和鼓励是我创作的动力❗❗❗