这样过 CF盾,大家能受得了吗

首先说明一下,测试用的这个URL需要开启魔法访问,不然页面加载的时候会有弹窗,系统是Win10,DrissionPage用的 4.1版。

我先是用DP库 控制鼠标,找到验证框点击,能够找到验证框,但验证失败。通过截图可以看到,虽然点击了验证你是真人,但是不给通过。

代码
from DrissionPage import Chromium, ChromiumOptions

options = ChromiumOptions()
options.headless(False)
options.incognito(True)
options.set_user_agent('Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.6613.120 Safari/537.36')
options.auto_port()

tab = Chromium(options).latest_tab
tab.get('https://ahrefs.com/backlink-checker/?input=baidu.com&mode=subdomains')

tab.wait(15)  #设置一个合适的时间 等待 验证真人 加载 

xpath ='x://*[@id="root"]/div[1]/section[1]/div/div/div/div/div/div[2]/div[2]/div[2]/form/div[1]/div/div'
div=tab.ele(xpath)
print(div)

iframe = div.shadow_root.ele('t:iframe')
print(iframe)

body = iframe.ele('t:body')
print(body)

title = iframe.ele('t:title').text
print(title)

ele = body.sr('t:input')
print(ele)

ele.click()
tab.get_screenshot(name='pic1.jpg')

tab.wait(2)
tab.get_screenshot(name='pic2.jpg')

input('Press any key to quit') 

截图显示已经在正确的位置上完成点击动作


截图显示验证失败

既然DP控制鼠标点击不行,我就想到了pyautogui。先手动获取验证框的位置,然后将获取的验证框坐标填入,再次执行脚本,成功!这样过CF盾,算半自动?为什么会这样,哪位大神能解释一下。

代码
from DrissionPage import Chromium, ChromiumOptions
import pyautogui
import time
import random

def human_like_move(target_x, target_y, duration=1):
    start_x, start_y = pyautogui.position()
    print('鼠标起始位置:', start_x, start_y)
    
    end_x, end_y = target_x, target_y
    print('目标位置:', end_x, end_y)
    
    points = [(start_x, start_y)]
    num_points = int(duration * 10)
    
    for i in range(1, num_points + 1):
        t = i / num_points
        ease_t = t * t * (3 - 2 * t)
        
        point_x = start_x + (end_x - start_x) * ease_t
        point_y = start_y + (end_y - start_y) * ease_t
        
        point_x += random.gauss(0, 2)
        point_y += random.gauss(0, 2)
        
        points.append((point_x, point_y))
    
    for point in points:
        pyautogui.moveTo(point[0], point[1], duration=duration/num_points)
        time.sleep(random.uniform(0.001, 0.003)) 
    
    print('移动完成,当前位置:', pyautogui.position())


options = ChromiumOptions()
# options.headless(True)
options.incognito(True)
options.set_user_agent('Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.6613.120 Safari/537.36')
options.auto_port()

tab = Chromium(options).latest_tab
tab.get('https://ahrefs.com/backlink-checker/?input=baidu.com&mode=subdomains')

tab.wait(15)

# 获取当前鼠标位置, 用于第一次定位验证框,后面可以注释掉
j, k= pyautogui.position()
print(f"定位到鼠标位置: X: {j}, Y: {k}")

x, y = 567, 411     #这里要换成自己获得的验证框的坐标
human_like_move(x, y)

tab.wait(2)
print('点击')
pyautogui.click()

tab.get_screenshot(name='pic1.jpg')

tab.wait(2)
tab.get_screenshot(name='pic2.jpg')

input('Press any key to quit') 

截图显示的是通过验证后的广告弹窗

223 Likes

楼主或许可以试试

pip install undetected_chromedriver

这个方法很骚tieba_025

但是如果用这个启动了还有CF盾,那可能还得和普通的一样

3 Likes
7 Likes

go我不会玩啊

4 Likes

这个牛B,感谢分享!是佬写的吗,我看安装 requirements 的时候 把DrissionPage 4.1干掉了,安装了4.0版的

这个是纯算过盾的,不同于那些模拟,这个占用很低

DrissionPage使用这个补丁应该可以过cf盾,TheFalloutOf76/CDP-bug-MouseEvent-.screenX-.screenY-patcher

13 Likes

谢谢佬,这段解开了我的疑惑。L站真是好,扔出一块砖,引出这么多玉来

1 Like

包的,在始皇的统领下,会越来越好的

1 Like

围观支持一下~

mark技术贴

3 Likes

mark cf盾

14 Likes

mark 过 cf

9 Likes

mark过盾
疯狂魔改中

感谢大佬指引,最近正准备看看这个,签到脚本一筹莫展。。。再次感谢

之前dp是可以过cloudflare的,后面吧dp加入检测了

佬你这是啥翻译插件啊

蹲个GPT插件

一个chrome 插件 ChatGPTBox,简单实用,没有那么多花里胡哨的

tieba_001

1 Like