Selenium应用程序在Heroku上托管时重定向到Cloudflare页面

eivnm1vs  于 2022-11-13  发布在  其他
关注(0)|答案(3)|浏览(188)

我做了一个不和谐的机器人,使用 selenium 访问一个网站,并获得信息,当我运行我的代码在本地我没有任何问题,但当我部署到Heroku的第一个URL,我得到重定向到页面Attention Required! | Cloudflare
我试过:

  • Selenium Web驱动程序:修改navigator.webdriver标志以阻止 selenium 检测

和许多其他与我使用相同的设置:

options = Options()
options.binary_location = os.environ.get("GOOGLE_CHROME_BIN")
options.add_experimental_option("excludeSwitches", ["enable-logging", "enable-automation"])
options.add_experimental_option('useAutomationExtension', False)
options.add_argument("--disable-blink-features=AutomationControlled")
options.add_argument("--headless")
options.add_argument("--disable-dev-shm-usage")
options.add_argument("--no-sandbox")
self.driver = webdriver.Chrome(executable_path=os.environ.get("CHROMEDRIVER_PATH"), options=options)
self.driver.execute_cdp_cmd('Network.setUserAgentOverride', {
    "userAgent": 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.53 Safari/537.36'})

但这不起作用,代码只能在本地运行,
PS:我在本地使用Windows
我重定向到的页面的源:https://gist.github.com/rafalou38/9ae95bd66e86d2171fc8a45cebd9720c

的所有数据

cbjzeqam

cbjzeqam1#

如果Selenium驱动的ChromeDriver启动的google-chrome * 浏览上下文 * 被重定向到页面...

...这意味着Cloudflare程序正在阻止您的程序访问 AUT(待测应用程序)
分析

  • Cloudflare* 阻止访问可能有以下几个原因:
  • Cloudflare 已将您的程序识别阿萨bot,访问被拒绝。您可以在网站是否可以检测到您正在使用带有chromedriver的selenium?中找到详细的讨论。

访问可能会因以下因素而被拒绝:

  • Cloudflare 正试图对抗一个可能的Dictionary attack
  • 您的系统IP已被 Cloudflare 列入黑名单,用于mining比特币Monero币使用您的系统。

在这些情况下,最终您将被重定向到验证码页面。

溶液

在这些情况下,可能的解决方案是使用undetected-chromedriver来初始化 *Chrome浏览上下文 *。
undetected-chromedriver是一个优化的Selenium Chromedriver补丁程序,它不会触发防机器人程序服务(如Distill Network / Imperva / DataDome /Botprotect.io)。它会自动下载驱动程序二进制文件并对其进行修补。

  • 代码块:
import undetected_chromedriver as uc
from selenium import webdriver

options = webdriver.ChromeOptions() 
options.add_argument("start-maximized")
driver = uc.Chrome(options=options)
driver.get('https://bet365.com')

替代解决方案

另一种解决方案是通过Project Honey Pot网站将您的IP地址列入白名单,您可以在标题为Attention Required one more step captcha CloudFlare Error的视频中找到详细的端到端流程。

i2byvkas

i2byvkas2#

我使用了“undetected_chromedriver”,下面的设置对我很有效:
使用了构建包:

添加了配置变量:

  • 色度驱动程序路径=/app/.色度驱动程序/bin/色度驱动程序
  • 浏览器代码=/app/.apt/usr/bin/谷歌铬

程式码片段:

import undetected_chromedriver as uc
from selenium import webdriver
import os

options = webdriver.ChromeOptions() 
options.add_argument("start-maximized")
options.add_argument('--headless')
options.add_argument('--no-sandbox')
options.add_argument('--disable-dev-shm-usage')
driver = uc.Chrome(executable_path=os.environ.get("CHROMEDRIVER_PATH"), options=options)
s5a0g9ez

s5a0g9ez3#

我知道这不是一个实际的解决方案,但有时候Cloudflare会使用你的IP地址来阻止你的位置。我的代码在我的本地服务器上运行得很好,但在Heroku上就不行了。
使用DebanjanB提供的解决方案发现代码是正确的。问题是Heroku的服务器运行在与我不同的国家。我通过询问一位住在另一个国家的朋友尝试用手机进入网站来确认这一点。Cloudflare阻止了我的朋友要求验证码。
我还没有解决这个问题。我不是一个Maven,解决方法似乎很复杂。我想代理可以解决它??
我会更新如果我得到它周围。

相关问题