Cloudflare 和 Chromedriver - cloudflare 区分 chromedriver 和正版 chrome?

Posted

技术标签:

【中文标题】Cloudflare 和 Chromedriver - cloudflare 区分 chromedriver 和正版 chrome?【英文标题】:Cloudflare and Chromedriver - cloudflare distinguishes between chromedriver and genuine chrome? 【发布时间】:2021-04-14 13:55:28 【问题描述】:

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

【问题讨论】:

这是网站上的 bot 检测...(我认为 cloudflare 与它没有什么特别的关系,但网站可以使用的一个功能)不同的是,在一种情况下注入被制作成DOM。该会话可以称为“机器人控制”......验证码永远不会在该会话中解决。如果您手动启动浏览器,该网站不会将您检测为机器人(因为您不是!),如果出现验证码,您可以解决它。 (chromedriver 启动,然后与浏览器交互......它是一个单独的可执行文件,驱动程序和浏览器之间存在 localhost 通信) 【参考方案1】:

此错误消息...

...暗示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)

参考文献

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

Selenium app redirect to Cloudflare page when hosted on Heroku How to bypass being rate limited ..html Error 1015 using Python

【讨论】:

谢谢,成功了!只是出于好奇,他们(cloudflare)究竟是如何识别我使用机器人软件的? @Tamar ***.com/questions/33225947/…

以上是关于Cloudflare 和 Chromedriver - cloudflare 区分 chromedriver 和正版 chrome?的主要内容,如果未能解决你的问题,请参考以下文章

Cloudflare 和 nginx:重定向过多

CloudFlare 和 socket.io

使用 CloudFlare、Heroku 和 RoR 时如何设置真实 IP 地址?

nginx、aws 和 cloudflare 的 cors 问题

使用 Google Domains 和 Cloudflare 时转发电子邮件 [关闭]

Cloudflare 如何区分 Selenium 和 Requests 流量?