我需要从网站上获取一些信息,只是出于教育目的,但由于受到保护,我无法发送请求。我得到了典型的检查你的浏览器页面首先出现,然后我被反复重定向。如何绕过python硒的这种保护?
我很久以前就遇到了这个问题,我能够解决它。使用下面的代码并享受:(
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"webdriverchromedriver.exe")
/////////编辑////////////////现在这种方式行不通!
使用未检测到的chromedriver pip包。这是一个非常简单的假客户包。
import undetected_chromedriver
def init_webdriver():
driver = undetected_chromedriver.Chrome()
driver.get(url)
content = driver.page_content
driver.close()
driver.quit()
你也可以在后台中运行它
import undetected_chromedriver
from selenium import webdriver
def init_webdriver():
options = webdriver.ChromeOptions()
options.add_argument("--headless")
driver = undetected_chromedriver.Chrome(options)
driver.get(url)
content = driver.page_content
driver.close()
driver.quit()
我于2022年6月28日进行了测试。效果很好。
这是一个延迟的响应,难怪开发人员仍然会反复面临这个问题。我使用的是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 ChromeOptions文档。
快乐的编码。
截至2022年3月:
嗨,我在DockerLinux镜像上使用无头Selenium时也遇到了同样的问题。
我在调用网络驱动程序之前创建了一个虚拟显示来解决这个问题
from pyvirtualdisplay import Display
display = Display(visible=0, size=(800, 800))
display.start()
不要忘记同时安装pyvirtualdisplay和xvfb:pip install pyvirtualdisplay
和sudo apt-get install xvfb
并且必须删除";"无头";选项,这是我使用的完整代码:
#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代码,以确认你不是机器人。有一个模拟的网页显示有助于做到这一点。
解决方案2021年7月
只需在chrome选项中添加user-agent参数,并将user-agent设置为任意值
ops = Options() ua='cat' ops.add_argument('--user-agent=%s' % ua) driver=uc.Chrome(executable_path=r"C:chromedriver.exe",chrome_options=ops)