如何解决Cloudflare 和 Chromedriver - cloudflare 区分 chromedriver 和正版 chrome?
我想使用 chromedriver 从 fanfiction.net 中抓取一些故事。 我尝试以下操作:
from selenium import webdriver
import time
path = 'D:\chromedriver\chromedriver.exe'
browser = webdriver.Chrome(path)
url1 = 'https://www.fanfiction.net/s/8832472'
url2 = 'https://www.fanfiction.net/s/5218118'
browser.get(url1)
time.sleep(5)
browser.get(url2)
打开第一个链接(有时我必须等待 5 秒钟)。当我想加载第二个 url 时,cloudflare 会进行干预并希望我解决验证码 - 这是无法解决的,至少 cloudflare 无法识别这一点。 如果我在 chromedriver 中手动输入链接(所以在 GUI 中),也会发生这种情况。但是,如果我在普通 chrome 中做同样的事情,一切都一样好(我什至没有在第一个链接上获得等待期)——即使在私有模式下并且所有 cookie 都被删除。我可以在几台机器上重现这个。 现在我的问题是:根据我的直觉,chromedriver 只是允许控制的普通 chrome 浏览器。与普通 chrome 有什么区别,Cloudflare 如何区分两者,以及如何将我的 chromedriver 屏蔽为普通 chrome? (我不打算在很短的时间内加载很多页面,所以它不应该看起来像一个机器人)。 我希望我的问题很清楚
解决方法
这个错误信息...
...表示 Cloudflare 已将您对网站的请求检测为自动机器人,随后拒绝您访问该应用程序。
解决方案
在这些情况下,一个潜在的解决方案是使用 undetected-chromedriver 来初始化 Chrome 浏览上下文。
undetected-chromedriver 是经过优化的 Selenium Chromedriver 补丁,它不会触发诸如 Distill Network / Imperva / DataDome / Botprotect.io 之类的反机器人服务。它会自动下载驱动程序二进制文件并对其进行修补。
-
代码块:
import undetected_chromedriver as uc from selenium import webdriver import time options = webdriver.ChromeOptions() options.add_argument("start-maximized") driver = uc.Chrome(options=options) url1 = 'https://www.fanfiction.net/s/8832472' url2 = 'https://www.fanfiction.net/s/5218118' driver.get(url1) time.sleep(5) driver.get(url2)
参考文献
您可以在以下位置找到一些相关的详细讨论:
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。