5

我想用 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?(我不打算在很短的时间内加载很多页面,所以它不应该看起来像一个机器人)。我希望我的问题很清楚

4

1 回答 1

2

此错误消息...

访问前检查您的浏览器

...意味着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)
    

参考

您可以在以下位置找到一些相关的详细讨论:

于 2021-01-08T23:51:09.773 回答