如何绕过 selenium 中的 Cloudflare bot 保护
How to bypass Cloudflare bot protection in selenium
出于教育目的,我需要从网站获取一些信息,但是由于保护我无法发送请求。我得到典型的检查您的浏览器页面首先出现,然后我被反复重定向。
我如何在 python selenium 中绕过这种保护?
我很久以前就遇到过这个问题,我能够解决它。使用下面的代码并享受:)
options = webdriver.ChromeOptions()
options.add_experimental_option("excludeSwitches", ["enable-automation"])
options.add_experimental_option('useAutomationExtension', False)
options.add_argument("--disable-blink-features=AutomationControlled")
driver = webdriver.Chrome(options=options, executable_path=r"webdriver\chromedriver.exe")
///////// 编辑 ///////////////
这种方式现在行不通了!
2021 年 7 月解决方案
只需在 chrome 选项中添加用户代理参数并将用户代理设置为任意值
ops = Options() ua='cat' ops.add_argument('--user-agent=%s' % ua) driver=uc.Chrome(executable_path=r"C:\chromedriver.exe",chrome_options=ops)
截至 2022 年 3 月:
嗨,我在 Docker Linux 图像上使用 headless Selenium 时遇到了同样的问题。
我通过在调用 webdriver 之前创建一个虚拟显示器解决了这个问题:
from pyvirtualdisplay import Display
display = Display(visible=0, size=(800, 800))
display.start()
别忘了 安装 pyvirtualdisplay 和 xvfb:
pip install pyvirtualdisplay
和 sudo apt-get install xvfb
并且你必须删除 ChromeDriver 中的“headless”选项,这里是我使用的完整代码:
#Display in order to avoid CloudFare bot detection
display = Display(visible=0, size=(800, 800))
display.start()
options = webdriver.ChromeOptions()
options.add_argument('--no-sandbox')
options.add_argument('start-maximized')
options.add_argument('enable-automation')
options.add_argument('--disable-infobars')
options.add_argument('--disable-dev-shm-usage')
options.add_argument('--disable-browser-side-navigation')
options.add_argument("--remote-debugging-port=9222")
# options.add_argument("--headless")
options.add_argument('--disable-gpu')
options.add_argument("--log-level=3")
driver = webdriver.Chrome(ChromeDriverManager().install(), chrome_options=options)
因为它在我的本地计算机上没有无头的情况下工作得很好,我想模拟一个真实的显示器也可以完成这项工作。
我不太明白为什么,但据我了解,CloudFare 会尝试执行 javascript 代码以确认您不是机器人。拥有模拟网页显示有助于做到这一点。
反应有点晚,难怪为什么开发人员仍然反复面对这个问题。我正在使用 Java v17 和 Gradle v7.4.2。
我的解决方案与上面解释的有关,但代码在 Java.
中
@Before
public void setup() {
WebDriverManager.chromedriver().setup();
ChromeOptions options = new ChromeOptions();
// Bypass Cloudflare checks
options.setExperimentalOption("useAutomationExtension", false);
options.addArguments("--disable-blink-features=AutomationControlled");
driver = new ChromeDriver(options);
driver.manage().window().maximize();
}
有关详细信息,请参阅 Selenium Chrome 选项 documentation。
编码愉快。
出于教育目的,我需要从网站获取一些信息,但是由于保护我无法发送请求。我得到典型的检查您的浏览器页面首先出现,然后我被反复重定向。 我如何在 python selenium 中绕过这种保护?
我很久以前就遇到过这个问题,我能够解决它。使用下面的代码并享受:)
options = webdriver.ChromeOptions()
options.add_experimental_option("excludeSwitches", ["enable-automation"])
options.add_experimental_option('useAutomationExtension', False)
options.add_argument("--disable-blink-features=AutomationControlled")
driver = webdriver.Chrome(options=options, executable_path=r"webdriver\chromedriver.exe")
///////// 编辑 /////////////// 这种方式现在行不通了!
2021 年 7 月解决方案
只需在 chrome 选项中添加用户代理参数并将用户代理设置为任意值
ops = Options() ua='cat' ops.add_argument('--user-agent=%s' % ua) driver=uc.Chrome(executable_path=r"C:\chromedriver.exe",chrome_options=ops)
截至 2022 年 3 月:
嗨,我在 Docker Linux 图像上使用 headless Selenium 时遇到了同样的问题。
我通过在调用 webdriver 之前创建一个虚拟显示器解决了这个问题:
from pyvirtualdisplay import Display
display = Display(visible=0, size=(800, 800))
display.start()
别忘了 安装 pyvirtualdisplay 和 xvfb:
pip install pyvirtualdisplay
和 sudo apt-get install xvfb
并且你必须删除 ChromeDriver 中的“headless”选项,这里是我使用的完整代码:
#Display in order to avoid CloudFare bot detection
display = Display(visible=0, size=(800, 800))
display.start()
options = webdriver.ChromeOptions()
options.add_argument('--no-sandbox')
options.add_argument('start-maximized')
options.add_argument('enable-automation')
options.add_argument('--disable-infobars')
options.add_argument('--disable-dev-shm-usage')
options.add_argument('--disable-browser-side-navigation')
options.add_argument("--remote-debugging-port=9222")
# options.add_argument("--headless")
options.add_argument('--disable-gpu')
options.add_argument("--log-level=3")
driver = webdriver.Chrome(ChromeDriverManager().install(), chrome_options=options)
因为它在我的本地计算机上没有无头的情况下工作得很好,我想模拟一个真实的显示器也可以完成这项工作。 我不太明白为什么,但据我了解,CloudFare 会尝试执行 javascript 代码以确认您不是机器人。拥有模拟网页显示有助于做到这一点。
反应有点晚,难怪为什么开发人员仍然反复面对这个问题。我正在使用 Java v17 和 Gradle v7.4.2。 我的解决方案与上面解释的有关,但代码在 Java.
中@Before
public void setup() {
WebDriverManager.chromedriver().setup();
ChromeOptions options = new ChromeOptions();
// Bypass Cloudflare checks
options.setExperimentalOption("useAutomationExtension", false);
options.addArguments("--disable-blink-features=AutomationControlled");
driver = new ChromeDriver(options);
driver.manage().window().maximize();
}
有关详细信息,请参阅 Selenium Chrome 选项 documentation。
编码愉快。