Cloudflare越过

目录

cloudflare turnstile

无头模式以spartanhost为例。 核心代码如下:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
from DrissionPage import Chromium, ChromiumOptions

# 设置浏览器选项
co = ChromiumOptions()
windows_user_agent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.6723.91 Safari/537.36"
co.set_user_agent(user_agent=windows_user_agent)
co.headless(True)
co.incognito()  # 启用隐身模式
co.set_local_port(9911)  # 设置本地端口,供调试使用
browser = Chromium(co)
browser.set.auto_handle_alert()  # 自动处理警告框

# 标签页操作
tab = browser.latest_tab  # 获取最新的标签页
tab.get("https://billing.spartanhost.net/login", timeout=15)

# 过 Cloudflare 验证
# 如果页面中有 Cloudflare-turnstile 验证提示元素,进行处理
if tab.ele('x://div[@class="cf-turnstile"]/div', timeout=15):
    # 查找并操作 iframe 中的复选框
    iframe = tab.ele('x://div[@class="cf-turnstile"]/div').sr('x://iframe')  # 获取 iframe 元素
    body = iframe.ele('x://body')  # 获取 iframe 内部的 body 元素
    # 在 body 元素内查找并点击复选框
    checkbox = body.sr('x://input[@type="checkbox"]')
    if checkbox:
        checkbox.click()
        print("已点击 Cloudflare 验证框")
    tab.wait(3)  # 等待页面加载
    cf_response = tab.ele('x://div[@class="cf-turnstile"]/div/input')
    print(cf_response.value)
else:
    print("没有找到 Cloudflare 验证元素")

cloudflare 5s盾

5s盾:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
from DrissionPage import Chromium, ChromiumOptions

# 设置浏览器选项
co = ChromiumOptions()
windows_user_agent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.6723.91 Safari/537.36"
co.set_user_agent(user_agent=windows_user_agent)
co.headless(True)
co.incognito()  # 启用隐身模式
co.set_local_port(9922)  # 设置本地端口,供调试使用
browser = Chromium(co)
browser.set.auto_handle_alert()  # 自动处理警告框

max_retries = 5
retries = 0
# 标签页操作
tab = browser.latest_tab  # 获取最新的标签页
tab.get("https://www.dmit.io/cloudflare", timeout=15)
page_source = tab.html  # 获取页面HTML源码
# print(page_source)
# 过 Cloudflare 验证
# 如果页面中有 Cloudflare-turnstile 验证提示元素,进行处理
print(tab.title)
if 'just a moment' in tab.title or '请稍候' in tab.title:
    while retries < max_retries:
        try:
            if tab.ele('x://div[@id="rvwE0"]', timeout=15):
                # 查找并操作 iframe 中的复选框
                iframe = tab.ele('x://div[@id="rvwE0"]/div/div').sr('x://iframe', timeout=15)  # 获取 iframe 元素
                if iframe:
                    # 尝试获取 body 元素和复选框元素
                    body = iframe.ele('x://body', timeout=15)
                    if body:
                        checkbox = body.sr('x://input[@type="checkbox"]', timeout=15)
                        if checkbox:
                            print("复选框可点击")
                            checkbox.click()
                            print("已点击 Cloudflare 验证框")
                            break  # 成功点击后跳出循环
                    else:
                        print("iframe 内部的 body 元素未找到")
                        break  # 如果 body 元素没有找到,则跳出循环
        except Exception as e:
            # 捕获所有异常并打印异常信息
            print(f"发生异常: {e}")
            retries += 1  # 增加重试次数
            tab.wait(1)  # 等待 1 秒后继续尝试

tab.wait(3)  # 等待页面加载
if 'just a moment' not in tab.title or '请稍候' not in tab.title:
    print(tab.title)
    print("5s盾点击成功")

使用DrissionPage.关键还是在于找元素,不同网页的turnstile一般只需要调整利用xpath找到第一个iframe属性就可以了。 iframe = tab.ele('x://div[@class="cf-turnstile"]/div').sr('x://iframe', timeout=15)利用xpath找到iframe 5s盾似乎基本都是一样的样式。
iframe = tab.ele('x://div[@id="rvwE0"]/div/div').sr('x://iframe', timeout=15)利用xpath找到iframe

💬评论
0%