Selenium+ChromeDriver 绕过cloudflare人机检查 获取页面数据

一个业务需求是从一个网站上抓取客户的评论信息,评论数据已经渲染好在html上由接口返回的,只能从HTML上一个个扣数据。一开始是使用的HtmlUnit来处理,但期间一直抛出拒绝访问提示

但是从浏览器可以直接访问,我就换别的网站进行访问,别的网站能够正常抓取数据,期间也试过设置请求头,直到在调试时偶然抛出不一样的错误>at script.M(https://challenges.cloudflare.com/turnstile/v0/g/d2a97f6b6ec9/api.js?onload=KHGO2&render=explicit:1)没截到图,搜了才发现该网站使用了cloudflare的人机检查,猜想HtmlUnit可能不是真正的请求,而是模拟的请求所以被cloudflare拦了下来。所以换了Selenium来处理

Selenium不能单独使用,需要和不同浏览器的Driver来配合使用,我使用的是ChromeDriver
1.下载Chrome和对应版本的ChromeDriver
Chrome版本和ChromeDriver版本要对手不让回抛出错误
我的chrome是126的版本


chromeDriver就也需要下载126版本 114及114之前的版本可以从这下载
http://chromedriver.storage.googleapis.com/index.html
最新版本需要到这下载
https://googlechromelabs.github.io/chrome-for-testing/
2.添加selenium依赖

3.访问页面
相关代码

还是抛出403 禁止访问

将selenium依赖升级到4.10 访问成功

可是这里访问的页面不是网站页面而是cloudflare人机检查的页面

看来selenium也绕不过cloudflare人机检查
只能再换方法了

这次使用undetected_chromedriver解决了cloudflare的人机检查成功访问了主页
undetected_chromedriver是用python编写的,所以转型用python实现
1.下载undetected_chromedriver 安装python就不做赘述了
pip install undetected-chromedriver
查看undetected-chromedriver
pip show undetected-chromedriver
下载的时候可能会抛出错误

WARNING: Failed to write executable - trying to use .deleteme logic
ERROR: Could not install packages due to an OSError: [WinError 2] 系统找不到指定的文件。: 'C:\Python312\Scripts\wsdump.exe' -> 'C:\Python312\Scripts\wsdump.exe.deleteme'

这时往前面翻一下会有一个WARNING提示pip版本不够,用它提示的语句升级pip的版本就可以了
使用undetected_chromedriver连接网站试试 抛出错误

ModuleNotFoundError: No module named 'distutils'

下载module就行
pip install setuptools
相关代码


成功访问主页 结尾报错是未正常关闭的原因

2.下载selenium
pip install selenium
3.使用selenium+undetected_chromedriver+chromedriver.exe测试(chromedriver.exe可以换成webdriver_manager)
代码


数据

接下来就是使用selenium定位元素获取了

热门相关:帝王娇宠:小萌妃,乖一点   许你盛世安宁   爆萌宠妃:邪帝,要抱抱   一场西班牙的雨   弃妃不承欢:腹黑国师别乱撩