解决Drissionpage无头模式拿不到数据

原理:无头模式下不会显示原型界面,但是网址会检测浏览器环境特征,有头的就会显示window.chrome,无头的就会没有。

解决方案:

co = ChromiumOptions().headless(True)  # 这个地方必须设置
co.set_paths(local_port=9111)  # 指定调试端口
co.set_argument('--user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36') # 必须增加一个user-agent
co.set_argument('--headless=new')       # 新的无头模式(Chrome 109+)

主要设置了一个.headless(True)和增加一个User Agent,这样原本抓取不到的内容就可以用无头模式抓到了

### 实现 DrissionPage 无头模式下的滑块验证 为了在 DrissionPage无头浏览器环境中成功处理滑块验证,可以采用图像识别技术来计算滑动距离,并模拟真实的拖拽动作。以下是具体的方法: #### 使用 OpenCV 进行图像匹配 由于直接获取的缺口图片可能不精确,因此需要更精细地处理图像以提高准确性。OpenCV 是一种强大的计算机视觉库,可以帮助分析和比较两张图片之间的差异。 ```python import cv2 import numpy as np def get_slider_distance(bg_image_path, slider_image_path): bg_img = cv2.imread(bg_image_path, 0) slider_img = cv2.imread(slider_image_path, 0) result = cv2.matchTemplate(bg_img, slider_img, cv2.TM_CCOEFF_NORMED) min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(result) top_left = max_loc bottom_right = (top_left[0] + w, top_left[1] + h) distance = int((bottom_right[0] - top_left[0]) / 2) # 计算中心位置作为移动距离 return distance ``` 此函数读取背景图与滑块图,利用模板匹配算法找到最佳匹配区域的位置,进而得出滑块应被拖动的距离[^2]。 #### 控制浏览器执行操作 接下来,在无头模式下启动 Chrome 浏览器实例并通过 JavaScript 执行拖放行为。这里假设已经安装好 `drissionpage` 库并且导入了必要的模块。 ```python from drission.page import ChromiumPage with ChromiumPage(headless=True) as page: url = '目标网站URL' page.get(url) # 获取验证码元素 slider_element = page.ele('css_selector_for_slider') # 假设已保存了背景图路径bg_image_path 和 滑块图路径slider_image_path move_distance = get_slider_distance(bg_image_path, slider_image_path) action_chain = ActionChains(page.driver) action_chain.click_and_hold(slider_element).perform() while True: try: action_chain.move_by_offset(move_distance, 0).release().perform() break except Exception as e: continue ``` 这段代码展示了如何创建一个无头浏览器会话,访问指定网页加载页面后定位到滑块控件,调用之前定义好的 `get_slider_distance()` 函数获得偏移量,最后通过 Selenium WebDriver 提供的动作链接口完成整个交互过程[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不叫十三

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值