Mik*_*cid 7 python selenium google-chrome web-scraping botdetect
我实际上正在尝试从不同的网站上抓取一些汽车数据,我一直在 chromebrowser 中使用 selenium,但有些网站实际上通过验证码验证阻止了 selenium(例如: https: //www.leboncoin.fr/),这只是1 或 2 个请求。我尝试在 chromebrowser 中更改 $_cdc 但这并没有解决问题,并且我一直在 chromebrowser 中使用这些选项
user_agent = 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.97 Safari/537.36'
options = webdriver.ChromeOptions()
options.add_argument(f'user-agent={user_agent}')
options.add_argument('start-maximized')
options.add_argument('disable-infobars')
options.add_argument('--profile-directory=Default')
options.add_argument("--incognito")
options.add_argument("--disable-plugins-discovery")
options.add_experimental_option("excludeSwitches", ["ignore-certificate-errors", "safebrowsing-disable-download-protection", "safebrowsing-disable-auto-update", "disable-client-side-phishing-detection"])
options.add_argument('--disable-extensions')
browser = webdriver.Chrome(chrome_options=options)
browser.delete_all_cookies()
browser.set_window_size(800,800)
browser.set_window_position(0,0)
Run Code Online (Sandbox Code Playgroud)
我试图抓取的网站使用 DataDome 来保证机器人安全,有什么线索吗?
为了避免像 Datadome 这样的反网络抓取服务,我们首先应该了解它们的工作原理,这实际上可以归结为 3 类检测:
Datadome 等服务使用这些工具来计算每个访问者的信任评分。低分意味着您可能是机器人,因此您要么被要求解决验证码,要么被完全拒绝访问。那么,我们怎样才能获得高分呢?
对于IP地址,我们希望通过代理来分配我们的负载,IP地址有以下几种:
因此,为了保持高信任评分,我们的抓取工具应该在住宅或移动代理池中轮换。
这个主题对于 StackOverflow 问题来说太大了,不过让我们做一个快速总结
网站可以使用 JavaScript 来识别连接客户端(抓取工具),因为 JavaScript 会泄露大量有关客户端的数据:操作系统、支持字体、视觉渲染功能等。
因此,举例来说:如果 Datadome 看到一堆 Linux 客户端通过 1280x720 窗口连接,那么它可以简单地推断出这种设置很可能是机器人,并为每个拥有这些指纹详细信息的人提供较低的信任评分。
如果您使用 Selenium 绕过 Datadome,则需要修补其中许多漏洞以摆脱低信任区域。这可以通过将浏览器本身修补为伪造的指纹详细信息(例如操作系统等)来完成。
有关这方面的更多信息,请参阅我的博客如何避免网页抓取阻塞:Javascript
最后,即使我们拥有大量 IP 地址并修补浏览器以防止泄露关键指纹详细信息,如果我们的连接模式不寻常,Datadome 仍然会给我们较低的信任分数。
为了解决这个问题,我们的刮刀应该以不明显的模式进行刮擦。它应该偶尔连接到非目标页面(例如网站主页),以显得更加人性化。
现在我们了解了我们的抓取工具是如何被检测到的,我们可以开始研究如何解决这个问题。Selenium 有一个很大的社区,这里要寻找的关键词是“隐形”。例如,selenium-stealth(及其分叉)是修补 Selenium 指纹泄漏的一个很好的起点。
不幸的是,这个抓取区域不是很透明,因为 Datadome 可以简单地收集公开已知的补丁并相应地调整其服务。这意味着您必须自己弄清楚很多东西,或者使用网络抓取 API 来完成这些工作,以便在前几个请求之后抓取受保护的网站。
我已经尽可能多地融入这个答案,因此有关更多信息,请参阅我关于此问题的博客文章系列如何在不被阻止的情况下进行抓取
它的发生可能有多种原因。尝试查看此处的答案,以某种方式可以防止此问题。
有时对我有用的一个简单解决方案是在 selenium 中使用Waits/调用,请参阅此处有关等待的文档。或者睡眠电话可以像这样完成Sleep
Import time
time.sleep(2)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
14532 次 |
| 最近记录: |