概述
浏览器模式基于 Playwright 实现,支持通过 Cloudflare Workers (edgetunnel) 代理浏览器流量,可以获取 JavaScript 动态渲染的内容。
依赖安装
使用浏览器模式需要安装以下依赖:
bash
# 安装带浏览器支持的 cfspider
pip install cfspider[browser]
# 安装 Chromium 浏览器
cfspider install
cfspider.Browser
浏览器类,封装 Playwright,支持通过 VLESS 代理访问网页。
类定义
python
class Browser:
def __init__(
self,
cf_proxies: str = None,
vless_uuid: str = None,
headless: bool = True,
**kwargs
)
def html(url: str, wait_until: str = "networkidle") -> str
def close()
初始化参数
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
cf_proxies |
str |
None |
代理地址,支持以下格式:
|
vless_uuid |
str |
None |
VLESS UUID(仅在使用 edgetunnel 域名时需要) |
headless |
bool |
True |
是否使用无头模式。False 时会显示浏览器窗口 |
**kwargs |
dict |
- | 传递给 Playwright 的其他参数(如 timeout, viewport 等) |
方法
| 方法 | 说明 |
|---|---|
html(url, wait_until="networkidle") |
获取网页的 HTML 内容。 参数:
返回:网页的 HTML 字符串 |
close() |
关闭浏览器实例 |
使用示例
使用 VLESS 链接(推荐)
python
import cfspider
# 使用 VLESS 链接,无需填写 UUID
browser = cfspider.Browser(
cf_proxies="vless://your-uuid@v2.example.com:443?path=/"
)
html = browser.html("https://httpbin.org/ip")
print(html) # 返回 Cloudflare IP
browser.close()
使用本地 HTTP 代理
python
browser = cfspider.Browser(cf_proxies="127.0.0.1:9674")
html = browser.html("https://httpbin.org/ip")
print(html)
browser.close()
使用 edgetunnel 域名 + UUID(旧方式)
python
browser = cfspider.Browser(
cf_proxies="v2.example.com",
vless_uuid="your-vless-uuid"
)
html = browser.html("https://httpbin.org/ip")
browser.close()
无代理模式
python
browser = cfspider.Browser()
html = browser.html("https://example.com")
browser.close()
使用上下文管理器
python
with cfspider.Browser(cf_proxies="vless://...") as browser:
html = browser.html("https://example.com")
# 自动关闭
显示浏览器窗口
python
browser = cfspider.Browser(
cf_proxies="vless://...",
headless=False # 显示浏览器窗口
)
html = browser.html("https://example.com")
browser.close()
cfspider.install_browser()
安装 Chromium 浏览器。
使用示例
python
import cfspider
# 安装浏览器
cfspider.install_browser()
# 或使用命令行
# cfspider install
cfspider.parse_vless_link()
解析 VLESS 链接,提取 UUID、主机、端口、路径等信息。
函数签名
python
cfspider.parse_vless_link(vless_link: str) -> dict
支持的格式
vless://uuid@host:port?type=ws&path=/xxx#namevless://uuid@host:port?path=%2Fxxxvless://uuid@host:port
返回值
返回包含以下键的字典:
uuid:VLESS UUIDhost:主机地址port:端口号path:路径(默认 "/")
使用示例
python
import cfspider
link = "vless://uuid@v2.example.com:443?path=/"
info = cfspider.parse_vless_link(link)
print(info)
# {'uuid': 'uuid', 'host': 'v2.example.com', 'port': 443, 'path': '/'}
错误处理
python
import cfspider
try:
browser = cfspider.Browser(cf_proxies="vless://...")
html = browser.html("https://example.com")
except cfspider.BrowserNotInstalledError:
print("浏览器未安装,请运行: cfspider install")
except cfspider.PlaywrightNotInstalledError:
print("Playwright 未安装,请运行: pip install playwright")
finally:
browser.close()