emulation
advanced
一句话定位
面向高风控站点的快速开始示例,覆盖挑战处理、输入框识别和 Cookie 提取。
涉及 API
FirefoxOptionsFirefoxPagepage.getpage.elepage.handle_cloudflare_challengepage.get_cookies
展示的不同用法
- 访问高风控站点并等待页面完成首屏加载
- 自动尝试处理 Cloudflare 挑战
- 定位输入框并发送问题
- 提取 document.cookie 与完整 Cookie 信息
适用场景
适合 anti-bot、Firefox 指纹环境说明和真实站点实战章节。
推荐阅读
anti-botemulation-21advanced-input-20
完整代码
来源:app/content/ruyipage_examples/quickstart_cloudfare.py · 仓库文件:quickstart_cloudfare.py
python
注释版
# =============================
# RuyiPage 示例注释版
# 标题: Cloudflare / Copilot 快速开始
# 说明: 面向高风控站点的快速开始示例,覆盖挑战处理、输入框识别和 Cookie 提取。
# 你会学到:
# 1. 访问高风控站点并等待页面完成首屏加载
# 2. 自动尝试处理 Cloudflare 挑战
# 3. 定位输入框并发送问题
# 4. 提取 document.cookie 与完整 Cookie 信息
# 相关 API: FirefoxOptions, FirefoxPage, page.get, page.ele, page.handle_cloudflare_challenge, page.get_cookies
# =============================
# -*- coding: utf-8 -*-
"""快速开始:访问 Copilot,自动尝试通过 Cloudflare,并打印完整 Cookie。"""
from ruyipage import FirefoxOptions, FirefoxPage, Keys
QUESTION = "你好,今天天气怎么样?"
def find_input_box(page: FirefoxPage):
for _ in range(30):
box = page.ele("css:textarea")
if not box:
box = page.ele('css:[contenteditable="true"]')
if not box:
box = page.ele("css:.input-area")
if box:
return box
page.wait(1)
return None
def print_full_cookies(page: FirefoxPage) -> None:
print("\n" + "=" * 60)
print("Cloudflare / 页面 Cookie")
print("=" * 60)
raw_cookie = page.run_js("return document.cookie") or ""
print(f"document.cookie: {raw_cookie}")
cookies = page.get_cookies(all_info=True)
print(f"Cookie 数量: {len(cookies)}")
for i, cookie in enumerate(cookies, 1):
print(f"[{i}] name={cookie.name}")
print(f" value={cookie.value}")
print(f" domain={cookie.domain}")
print(f" path={cookie.path}")
print(f" httpOnly={cookie.http_only}")
print(f" secure={cookie.secure}")
print(f" sameSite={cookie.same_site}")
print(f" expiry={cookie.expiry}")
opts = FirefoxOptions()
# 如果 Firefox 不在默认安装目录,可以取消注释并指定路径。
# opts.set_browser_path(r"D:\Firefox\firefox.exe")
# 如果你想复用登录状态、Cookie、扩展,可以取消注释并指定 userdir。
# opts.set_user_dir(r"D:\ruyipage_userdir")
page = FirefoxPage(opts)
try:
print("=" * 60)
print("copilot.microsoft.com Cloudflare 测试")
print("=" * 60)
print("\n-> 访问 https://copilot.microsoft.com/ ...")
page.get("https://copilot.microsoft.com/", wait="none")
page.wait(5)
print("-> 等待输入框...")
input_box = find_input_box(page)
if input_box:
print("-> 找到输入框,开始输入问题...")
try:
input_box.click()
page.wait(0.8)
input_box.input(QUESTION, clear=True)
page.wait(0.8)
send_btn = page.ele('css:button[aria-label*="Send"]')
if not send_btn:
send_btn = page.ele('css:button[type="submit"]')
if send_btn:
print("-> 点击发送按钮...")
send_btn.click()
else:
print("-> 按 Enter 发送...")
page.actions.press(Keys.ENTER).perform()
print("-> 已发送问题,等待 Cloudflare 触发...")
page.wait(15)
except Exception as e:
print(f"-> 发送失败: {e}")
page.wait(5)
else:
print("-> 未找到输入框,直接等待 Cloudflare...")
page.wait(5)
print("\n-> 开始自动处理 Cloudflare...")
passed = page.handle_cloudflare_challenge(timeout=120, check_interval=2)
print("\n" + "=" * 60)
if passed:
print("✅ 成功通过 Cloudflare!")
print_full_cookies(page)
else:
print("❌ 超时未通过")
print("\n[+] 保持浏览器打开 500 秒...")
page.wait(500)
finally:
page.quit()
# -*- coding: utf-8 -*-
"""快速开始:访问 Copilot,自动尝试通过 Cloudflare,并打印完整 Cookie。"""
from ruyipage import FirefoxOptions, FirefoxPage, Keys
QUESTION = "你好,今天天气怎么样?"
def find_input_box(page: FirefoxPage):
for _ in range(30):
box = page.ele("css:textarea")
if not box:
box = page.ele('css:[contenteditable="true"]')
if not box:
box = page.ele("css:.input-area")
if box:
return box
page.wait(1)
return None
def print_full_cookies(page: FirefoxPage) -> None:
print("\n" + "=" * 60)
print("Cloudflare / 页面 Cookie")
print("=" * 60)
raw_cookie = page.run_js("return document.cookie") or ""
print(f"document.cookie: {raw_cookie}")
cookies = page.get_cookies(all_info=True)
print(f"Cookie 数量: {len(cookies)}")
for i, cookie in enumerate(cookies, 1):
print(f"[{i}] name={cookie.name}")
print(f" value={cookie.value}")
print(f" domain={cookie.domain}")
print(f" path={cookie.path}")
print(f" httpOnly={cookie.http_only}")
print(f" secure={cookie.secure}")
print(f" sameSite={cookie.same_site}")
print(f" expiry={cookie.expiry}")
opts = FirefoxOptions()
# 如果 Firefox 不在默认安装目录,可以取消注释并指定路径。
# opts.set_browser_path(r"D:\Firefox\firefox.exe")
# 如果你想复用登录状态、Cookie、扩展,可以取消注释并指定 userdir。
# opts.set_user_dir(r"D:\ruyipage_userdir")
page = FirefoxPage(opts)
try:
print("=" * 60)
print("copilot.microsoft.com Cloudflare 测试")
print("=" * 60)
print("\n-> 访问 https://copilot.microsoft.com/ ...")
page.get("https://copilot.microsoft.com/", wait="none")
page.wait(5)
print("-> 等待输入框...")
input_box = find_input_box(page)
if input_box:
print("-> 找到输入框,开始输入问题...")
try:
input_box.click()
page.wait(0.8)
input_box.input(QUESTION, clear=True)
page.wait(0.8)
send_btn = page.ele('css:button[aria-label*="Send"]')
if not send_btn:
send_btn = page.ele('css:button[type="submit"]')
if send_btn:
print("-> 点击发送按钮...")
send_btn.click()
else:
print("-> 按 Enter 发送...")
page.actions.press(Keys.ENTER).perform()
print("-> 已发送问题,等待 Cloudflare 触发...")
page.wait(15)
except Exception as e:
print(f"-> 发送失败: {e}")
page.wait(5)
else:
print("-> 未找到输入框,直接等待 Cloudflare...")
page.wait(5)
print("\n-> 开始自动处理 Cloudflare...")
passed = page.handle_cloudflare_challenge(timeout=120, check_interval=2)
print("\n" + "=" * 60)
if passed:
print("✅ 成功通过 Cloudflare!")
print_full_cookies(page)
else:
print("❌ 超时未通过")
print("\n[+] 保持浏览器打开 500 秒...")
page.wait(500)
finally:
page.quit()