Cloudflare 和 Chromedriver - cloudflare 区分 chrome 驱动程序和正版 chrome 驱动程序?
Cloudflare and Chromedriver - cloudflare distinguishes between chromedriver and genuine chrome?
我想使用 chrome 驱动程序从 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)
第一个link打开(有时我要等5秒)。当我想加载第二个 url 时,cloudflare 介入并要我解决验证码 - 这是不可解决的,至少 cloudflare 不承认这一点。
如果我在 chrome 驱动程序中手动输入 links(因此在 GUI 中),也会发生这种情况。但是,如果我在正常 chrome 中做同样的事情,一切都正常(我什至没有在第一个 link 上得到等待时间)——即使在私人模式下,所有的 cookie 都被删除。我可以在几台机器上重现这个。
现在我的问题是:根据我的直觉,chrome 驱动程序只是允许被控制的普通 chrome 浏览器。与普通 chrome 有何不同,Cloudflare 如何区分两者,以及如何将我的 chrome 驱动程序屏蔽为普通 chrome? (我不打算在很短的时间内加载很多页面,所以它不应该看起来像一个机器人)。
我希望我的问题很清楚
这个错误信息...
...表示 Cloudflare 已检测到您作为自动机器人向网站发出的请求,随后拒绝您访问该应用程序。
解决方案
在这些情况下,一个潜在的解决方案是使用 undetected-chromedriver 来初始化 Chrome 浏览上下文 .
undetected-chromedriver 是经过优化的 Selenium Chrome 驱动程序补丁,它不会触发像 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
我想使用 chrome 驱动程序从 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)
第一个link打开(有时我要等5秒)。当我想加载第二个 url 时,cloudflare 介入并要我解决验证码 - 这是不可解决的,至少 cloudflare 不承认这一点。 如果我在 chrome 驱动程序中手动输入 links(因此在 GUI 中),也会发生这种情况。但是,如果我在正常 chrome 中做同样的事情,一切都正常(我什至没有在第一个 link 上得到等待时间)——即使在私人模式下,所有的 cookie 都被删除。我可以在几台机器上重现这个。 现在我的问题是:根据我的直觉,chrome 驱动程序只是允许被控制的普通 chrome 浏览器。与普通 chrome 有何不同,Cloudflare 如何区分两者,以及如何将我的 chrome 驱动程序屏蔽为普通 chrome? (我不打算在很短的时间内加载很多页面,所以它不应该看起来像一个机器人)。 我希望我的问题很清楚
这个错误信息...
...表示 Cloudflare 已检测到您作为自动机器人向网站发出的请求,随后拒绝您访问该应用程序。
解决方案
在这些情况下,一个潜在的解决方案是使用 undetected-chromedriver 来初始化 Chrome 浏览上下文 .
undetected-chromedriver 是经过优化的 Selenium Chrome 驱动程序补丁,它不会触发像 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