我做了一个不和谐的机器人,使用 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
的所有数据
3条答案
按热度按时间cbjzeqam1#
如果Selenium驱动的ChromeDriver启动的google-chrome * 浏览上下文 * 被重定向到页面...
...这意味着Cloudflare程序正在阻止您的程序访问 AUT(待测应用程序)。
分析
访问可能会因以下因素而被拒绝:
在这些情况下,最终您将被重定向到验证码页面。
溶液
在这些情况下,可能的解决方案是使用undetected-chromedriver来初始化 *Chrome浏览上下文 *。
undetected-chromedriver是一个优化的Selenium Chromedriver补丁程序,它不会触发防机器人程序服务(如Distill Network / Imperva / DataDome /Botprotect.io)。它会自动下载驱动程序二进制文件并对其进行修补。
替代解决方案
另一种解决方案是通过Project Honey Pot网站将您的IP地址列入白名单,您可以在标题为Attention Required one more step captcha CloudFlare Error的视频中找到详细的端到端流程。
i2byvkas2#
我使用了“undetected_chromedriver”,下面的设置对我很有效:
使用了构建包:
添加了配置变量:
程式码片段:
s5a0g9ez3#
我知道这不是一个实际的解决方案,但有时候Cloudflare会使用你的IP地址来阻止你的位置。我的代码在我的本地服务器上运行得很好,但在Heroku上就不行了。
使用DebanjanB提供的解决方案发现代码是正确的。问题是Heroku的服务器运行在与我不同的国家。我通过询问一位住在另一个国家的朋友尝试用手机进入网站来确认这一点。Cloudflare阻止了我的朋友要求验证码。
我还没有解决这个问题。我不是一个Maven,解决方法似乎很复杂。我想代理可以解决它??
我会更新如果我得到它周围。