
Ethan Collins
Pattern Recognition Specialist

网页自动化和数据提取对于许多应用至关重要,但验证码(CAPTCHA)常常会中断这些流程,导致延迟和失败。
为了解决这个问题,Crawl4AI 和 CapSolver 进行了合作。Crawl4AI 提供了先进的、自适应的网页爬取和浏览器控制功能,而 CapSolver 提供了高精度和快速的验证码解决服务。这种协作使开发者能够实现无缝、不间断的网页自动化和数据收集。
Crawl4AI 与 CapSolver 集成的核心目标是:
Crawl4AI 是一个开源的、适合大语言模型(LLM)的网页爬虫和数据提取工具,旨在满足现代 AI 应用的需求。它可以将复杂的网页内容转换为干净的、结构化的 Markdown 格式,大大简化后续的数据处理和分析。
Crawl4AI 适用于市场调研、新闻聚合或电子商务产品收集等大规模数据抓取。它能够处理动态的、JavaScript 密集的网站,并作为 AI 代理和自动化数据管道的可靠数据源。
Crawl4AI 展望未来,希望数字数据成为真正的资本资产。他们的白皮书描述了一个共享数据经济,使个人和企业能够构建、评估并选择性地货币化他们的真实数据——这与 CapSolver 通过无缝验证码解决和自动化数据访问来解锁人类生成数据价值的使命高度契合。
CapSolver 是一个领先的自动化验证码解决服务,利用先进的 AI 技术为各种复杂的验证码挑战提供快速且准确的解决方案。它的目标是帮助开发者和企业克服验证码障碍,确保自动化流程的顺利运行。
在集成 CapSolver 之前,即使拥有强大的爬取能力,Crawl4AI 在遇到验证码时仍常常面临以下痛点:
Crawl4AI 与 CapSolver 的集成提供了一个优雅而强大的解决方案,彻底解决了上述痛点。整体思路是:当 Crawl4AI 在爬取过程中检测到验证码时,会自动触发 CapSolver 服务进行识别和解决,并无缝地将解决方案注入爬取流程,从而实现自动绕过验证码。
集成价值:
Crawl4AI 与 CapSolver 的集成主要涉及两种方法:API 集成和浏览器扩展集成。推荐使用 API 集成,因为它更灵活和精确,避免了浏览器扩展在复杂页面上可能遇到的注入时机和准确性问题。
API 集成需要结合 Crawl4AI 的 js_code 功能。基本步骤如下:
siteKey、websiteURL)到 CapSolver 服务以获取验证码解决方案(通常为 Token)。CrawlerRunConfig 注入 Token:使用 CrawlerRunConfig 方法的 js_code 参数,将 CapSolver 返回的 Token 注入到目标页面的相应元素中。例如,对于 reCAPTCHA v2,Token 通常需要注入到 g-recaptcha-response 元素中。reCAPTCHA v2 是一种常见的“我不是机器人”复选框验证码。要解决它,需要通过 CapSolver 获取 gRecaptchaResponse Token 并注入到页面中。如果您不确定如何设置参数,请查看 教程博客 以自动检测验证码并提取配置。

示例代码分析:
用户提供的代码展示了如何使用 capsolver.solve 方法获取 reCAPTCHA v2 Token,并通过 js_code 将其分配给 g-recaptcha-response 文本区域,然后模拟点击提交按钮。这种方法确保在提交表单时正确携带验证码 Token。
import asyncio
import capsolver
from crawl4ai import *
# TODO: 设置您的配置
api_key = "CAP-xxxxxxxxxxxxxxxxxxxxx" # 您的 CapSolver API 密钥
site_key = "6LfW6wATAAAAAHLqO2pb8bDBahxlMxNdo9g947u9" # 您目标网站的站点密钥
site_url = "https://recaptcha-demo.appspot.com/recaptcha-v2-checkbox.php" # 您目标网站的页面 URL
captcha_type = "ReCaptchaV2TaskProxyLess" # 您目标验证码的类型
capsolver.api_key = api_key
async def main():
browser_config = BrowserConfig(
verbose=True,
headless=False,
use_persistent_context=True,
)
async with AsyncWebCrawler(config=browser_config) as crawler:
await crawler.arun(
url=site_url,
cache_mode=CacheMode.BYPASS,
session_id="session_captcha_test"
)
# 使用 CapSolver SDK 获取验证码 Token
solution = capsolver.solve({
"type": captcha_type,
"websiteURL": site_url,
"websiteKey": site_key,
})
token = solution["gRecaptchaResponse"]
print("验证码 Token:", token)
js_code = """
const textarea = document.getElementById(\'g-recaptcha-response\');
if (textarea) {
textarea.value = \"""" + token + """\";
document.querySelector(\'button.form-field[type="submit"]\').click();
}
"""
wait_condition = """() => {
const items = document.querySelectorAll(\'h2\');
return items.length > 1;
}"""
run_config = CrawlerRunConfig(
cache_mode=CacheMode.BYPASS,
session_id="session_captcha_test",
js_code=js_code,
js_only=True,
wait_for=f"js:{wait_condition}"
)
result_next = await crawler.arun(
url=site_url,
config=run_config,
)
print(result_next.markdown)
if __name__ == "__main__":
asyncio.run(main())
如果 v2 Token 无效,请通过浏览器扩展获取 JSON 配置并发送给我们的支持团队以提高 Token 分数:解决 reCAPTCHA v2、不可见 v2、v3、v3 企业版 ≥0.9 分。
reCAPTCHA v3 是一种隐形验证码,通常在后台运行并返回一个评分。在解决 reCAPTCHA v3 之前,请阅读 CapSolver 的 reCAPTCHA v3 文档 以了解所需参数以及如何获取它们。我们将使用 reCAPTCHA v3 演示 作为示例。

与 v2 不同,reCAPTCHA v3 是隐形的,因此 Token 注入可能比较棘手。过早注入 Token 可能会被原始 Token 覆盖,而过晚注入可能错过验证步骤。在该演示网站上,访问页面会自动触发 Token 生成和验证。
通过观察页面,我们看到解决 reCAPTCHA 会触发一个 fetch 请求来验证 Token。解决方案是提前从 CapSolver 获取 Token,并拦截 fetch 请求,在合适的时机替换原始 Token。
示例代码分析:
代码拦截了 window.fetch 方法,当发送请求到 /recaptcha-v3-verify.php 时,会用从 CapSolver 提前获取的 Token 替换原始请求的 Token。这种高级拦截技术确保即使是对直接操作困难的动态生成的 v3 验证码也能被有效绕过。
import asyncio
import capsolver
from crawl4ai import *
# TODO: 设置您的配置
api_key = "CAP-xxxxxxxxxxxxxxxxxxxxx" # 您的 CapSolver API 密钥
site_key = "6LdKlZEpAAAAAAOQjzC2v_d36tWxCl6dWsozdSy9" # 您目标网站的站点密钥
site_url = "https://recaptcha-demo.appspot.com/recaptcha-v3-request-scores.php" # 您目标网站的页面 URL
page_action = "examples/v3scores" # 您目标网站的页面操作
captcha_type = "ReCaptchaV3TaskProxyLess" # 您目标验证码的类型
capsolver.api_key = api_key
async def main():
browser_config = BrowserConfig(
verbose=True,
headless=False,
use_persistent_context=True,
)
# 通过 CapSolver SDK 获取 reCAPTCHA Token
solution = capsolver.solve({
"type": captcha_type,
"websiteURL": site_url,
"websiteKey": site_key,
"pageAction": page_action,
})
token = solution["gRecaptchaResponse"]
print("reCAPTCHA Token:", token)
async with AsyncWebCrawler(config=browser_config) as crawler:
await crawler.arun(
url=site_url,
cache_mode=CacheMode.BYPASS,
session_id="session_captcha_test"
)
js_code = """
const originalFetch = window.fetch;
window.fetch = function(...args) {
if (typeof args[0] === \'string\' && args[0].includes(\'/recaptcha-v3-verify.php\')) {
const url = new URL(args[0], window.location.origin);
url.searchParams.set('action', '"+ token +"');
args[0] = url.toString();
document.querySelector('.token').innerHTML = "fetch('/recaptcha-v3-verify.php?action=examples/v3scores&token="+token+")";
console.log('Fetch URL hooked:', args[0]);
}
return originalFetch.apply(this, args);
};
"""
wait_condition = "() => {
return document.querySelector('.step3:not(.hidden)');
}"
run_config = CrawlerRunConfig(
cache_mode=CacheMode.BYPASS,
session_id="session_captcha_test",
js_code=js_code,
js_only=True,
wait_for=f"js:{wait_condition}"
)
result_next = await crawler.arun(
url=site_url,
config=run_config,
)
print(result_next.markdown)
if __name__ == "__main__":
asyncio.run(main())
如果 v3 验证码无效,请通过扩展程序获取 JSON 配置并发送给我们的支持团队以改进验证码评分:解决 reCAPTCHA v2、invisible v2、v3、v3 Enterprise ≥0.9 分数.
在开始解决 Cloudflare Turnstile 之前,请仔细阅读 CapSolver 的 Cloudflare Turnstile 文档 以确保了解创建任务时需要传递哪些参数以及如何获取这些值。接下来,我们将使用 Turnstile 演示 作为示例,演示如何解决 Cloudflare Turnstile。
解决 Turnstile 后,令牌将被注入名为 cf-turnstile-response 的输入元素中。因此,我们的 js_code 也需要模拟此操作。在继续下一步操作时,例如点击登录,此令牌将自动携带以进行验证。
import asyncio
import capsolver
from crawl4ai import *
# TODO: 设置您的配置
api_key = "CAP-xxxxxxxxxxxxxxxxxxxxx" # 您的 CapSolver API 密钥
site_key = "0x4AAAAAAAGlwMzq_9z6S9Mh" # 您的目标网站的 site key
site_url = "https://clifford.io/demo/cloudflare-turnstile" # 您的目标网站的页面 URL
captcha_type = "AntiTurnstileTaskProxyLess" # 您的目标验证码类型
capsolver.api_key = api_key
async def main():
browser_config = BrowserConfig(
verbose=True,
headless=False,
use_persistent_context=True,
)
async with AsyncWebCrawler(config=browser_config) as crawler:
await crawler.arun(
url=site_url,
cache_mode=CacheMode.BYPASS,
session_id="session_captcha_test"
)
# 使用 CapSolver SDK 获取 Turnstile 验证码
solution = capsolver.solve({
"type": captcha_type,
"websiteURL": site_url,
"websiteKey": site_key,
})
token = solution["token"]
print("Turnstile 验证码:", token)
js_code = """
document.querySelector('input[name="cf-turnstile-response"]').value = '"""+token+""";
document.querySelector('button[type="submit"]').click();
"""
wait_condition = """() => {
const items = document.querySelectorAll('h1');
return items.length === 0;
}"""
run_config = CrawlerRunConfig(
cache_mode=CacheMode.BYPASS,
session_id="session_captcha_test",
js_code=js_code,
js_only=True,
wait_for=f"js:{wait_condition}"
)
result_next = await crawler.arun(
url=site_url,
config=run_config,
)
print(result_next.markdown)
if __name__ == "__main__":
asyncio.run(main())
Cloudflare Challenge 通常需要更复杂的处理,包括匹配浏览器指纹和 User-Agent。CapSolver 提供了 AntiCloudflareTask 类型来解决此类挑战。在解决 Cloudflare Challenge 之前,请查阅 CapSolver 的 Cloudflare Challenge 文档 以了解创建任务时所需的参数以及如何获取它们。
注意事项:
import asyncio
import time
import capsolver
from crawl4ai import *
# TODO: 设置您的配置
api_key = "CAP-XXX" # 您的 CapSolver API 密钥
site_url = "https://www.tempo.co/hukum/polisi-diduga-salah-tangkap-pelajar-di-magelang-yang-dituduh-perusuh-demo-2070572" # 您的目标网站的页面 URL
captcha_type = "AntiCloudflareTask" # 您的目标验证码类型
api_proxy = "http://127.0.0.1:13120"
capsolver.api_key = api_key
user_data_dir = "./crawl4ai_/browser-profile/Default1493"
# 或者
cdp_url = "ws://localhost:xxxx"
async def main():
print("解决验证码开始")
start_time = time.time()
# 使用 CapSolver SDK 获取 Cloudflare 验证码
solution = capsolver.solve({
"type": captcha_type,
"websiteURL": site_url,
"proxy": api_proxy,
"userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/138.0.0.0 Safari/537.36"
})
token_time = time.time()
print(f"解决验证码耗时: {token_time - start_time:.2f} 秒")
# 设置 cookies
cookies = solution.get("cookies", [])
if isinstance(cookies, dict):
cookies_array = []
for name, value in cookies.items():
cookies_array.append({
"name": name,
"value": value,
"url": site_url,
})
cookies = cookies_array
elif not isinstance(cookies, list):
cookies = []
token = solution["token"]
print("Challenge 验证码:", token)
browser_config = BrowserConfig(
verbose=True,
headless=False,
use_persistent_context=True,
user_data_dir=user_data_dir,
# cdp_url=cdp_url,
user_agent=solution["userAgent"],
cookies=cookies,
)
async with AsyncWebCrawler(config=browser_config) as crawler:
result = await crawler.arun(
url=site_url,
cache_mode=CacheMode.BYPASS,
session_id="session_captcha_test"
)
print(result.markdown[:500])
if __name__ == "__main__":
asyncio.run(main())
AWS WAF 是一种 Web 应用程序防火墙,通常通过设置特定的 Cookie 来验证请求。有关处理 AWS WAF 的更多信息,请参考我们的 AWS WAF 文档,以确保了解创建任务时需要提交哪些参数以及如何获取这些值。解决 AWS WAF 的关键是获取 CapSolver 返回的 aws-waf-token Cookie。
示例代码分析:
代码通过 CapSolver 获取 aws-waf-token,然后使用 js_code 将其设置为页面 Cookie 并刷新页面。刷新后,Crawl4AI 将使用正确的 Cookie 访问页面,从而绕过 AWS WAF 检测。
import asyncio
import capsolver
from crawl4ai import *
# TODO: 设置您的配置
api_key = "CAP-xxxxxxxxxxxxxxxxxxxxx" # 您的 CapSolver API 密钥
site_url = "https://nft.porsche.com/onboarding@6" # 您的目标网站的页面 URL
cookie_domain = ".nft.porsche.com" # 您希望应用 cookie 的域名
captcha_type = "AntiAwsWafTaskProxyLess" # 您的目标验证码类型
capsolver.api_key = api_key
async def main():
browser_config = BrowserConfig(
verbose=True,
headless=False,
use_persistent_context=True,
)
async with AsyncWebCrawler(config=browser_config) as crawler:
await crawler.arun(
url=site_url,
cache_mode=CacheMode.BYPASS,
session_id="session_captcha_test"
)
# 使用 CapSolver SDK 获取 AWS WAF cookie
solution = capsolver.solve({
"type": captcha_type,
"websiteURL": site_url,
})
cookie = solution["cookie"]
print("AWS WAF cookie:", cookie)
js_code = """
document.cookie = 'aws-waf-token=""" + cookie + """;domain=""" + cookie_domain + """;path=/';
location.reload();
"""
wait_condition = """() => {
return document.title === '加入保时捷在 Web3 的旅程';
}"""
run_config = CrawlerRunConfig(
cache_mode=CacheMode.BYPASS,
session_id="session_captcha_test",
js_code=js_code,
js_only=True,
wait_for=f"js:{wait_condition}"
)
result_next = await crawler.arun(
url=site_url,
config=run_config,
)
print(result_next.markdown)
if __name__ == "__main__":
asyncio.run(main())
将浏览器扩展与 crawl4ai 集成需要指定浏览器的启动目录,然后安装扩展以解决验证码。您可以选择让扩展自动解决验证码,或者使用 js_code 进行主动解决。一般步骤如下:
user_data_dir 启动浏览器。chrome://extensions,在右上角点击“开发者模式”,然后选择“加载解压的扩展程序”并选择本地扩展项目目录。/CapSolver/assets/config.js 中直接配置 apiKey。config.js 参数说明:
useCapsolver: 是否自动使用 CapSolver 检测和解决验证码。manualSolving: 是否手动触发验证码解决。useProxy: 是否配置代理。enabledForBlacklistControl: 是否启用黑名单控制。- ...
js_code 在适当的时候解决验证码。以下示例将展示如何通过浏览器扩展集成解决 reCAPTCHA v2/v3、Cloudflare Turnstile、AWS WAF。
在解决 reCAPTCHA v2 之前,请确保已正确配置扩展。接下来,我们将使用演示 API 作为示例,演示如何解决 reCAPTCHA v2。
解决 reCAPTCHA 后,当继续下一步操作时,例如点击登录,验证将自动进行。
import asyncio
import time
from crawl4ai import *
# TODO: 设置您的配置
user_data_dir = "/browser-profile/Default1"
browser_config = BrowserConfig(
verbose=True,
headless=False,
user_data_dir=user_data_dir,
use_persistent_context=True,
proxy="http://127.0.0.1:13120",
)
async def main():
async with AsyncWebCrawler(config=browser_config) as crawler:
result_initial = await crawler.arun(
url="https://recaptcha-demo.appspot.com/recaptcha-v2-checkbox.php",
cache_mode=CacheMode.BYPASS,
session_id="session_captcha_test"
)
# 后续操作
time.sleep(300)
if __name__ == "__main__":
asyncio.run(main())
如果您需要主动选择何时解决验证码,请使用以下代码:

您需要将扩展的 manualSolving 参数配置为 true。否则,扩展会自动触发验证码解决。
import asyncio
import time
from crawl4ai import *
# TODO: 设置您的配置
user_data_dir = "/browser-profile/Default1"
browser_config = BrowserConfig(
verbose=True,
headless=False,
user_data_dir=user_data_dir,
use_persistent_context=True,
proxy="http://127.0.0.1:13120",
)
async def main():
async with AsyncWebCrawler(config=browser_config) as crawler:
result_initial = await crawler.arun(
url="https://recaptcha-demo.appspot.com/recaptcha-v2-checkbox.php",
cache_mode=CacheMode.BYPASS,
session_id="session_captcha_test"
)
# 后续操作
time.sleep(6)
js_code = """
let solverButton = document.querySelector('#capsolver-solver-tip-button');
if (solverButton) {
// 点击事件
const clickEvent = new MouseEvent('click', {
bubbles: true,
cancelable: true,
view: window
});
solverButton.dispatchEvent(clickEvent);
}
"""
print(js_code)
run_config = CrawlerRunConfig(
cache_mode=CacheMode.BYPASS,
session_id="session_captcha_test",
js_code=js_code,
js_only=True,
)
result_next = await crawler.arun(
url="https://recaptcha-demo.appspot.com/recaptcha-v2-checkbox.php",
config=run_config
)
print("JS 执行结果:", result_next.js_execution_result)
time.sleep(300)
if __name__ == "__main__":
asyncio.run(main())
在解决 reCAPTCHA v3 之前,请确保已正确配置扩展。接下来,我们将使用演示 API 作为示例,演示如何解决 reCAPTCHA v3。
解决 reCAPTCHA 后,当继续下一步操作时,例如点击登录,验证将自动进行。
- 建议通过扩展程序自动解决 reCAPTCHA v3,通常在访问网站时触发。
import asyncio
import time
from crawl4ai import *
# TODO: 设置您的配置
user_data_dir = "/browser-profile/Default1"
browser_config = BrowserConfig(
verbose=True,
headless=False,
user_data_dir=user_data_dir,
use_persistent_context=True,
proxy="http://127.0.0.1:13120",
)
async def main():
async with AsyncWebCrawler(config=browser_config) as crawler:
result_initial = await crawler.arun(
url="https://recaptcha-demo.appspot.com/recaptcha-v2-checkbox.php",
cache_mode=CacheMode.BYPASS,
session_id="session_captcha_test"
)
# 稍后做些事情
time.sleep(300)
if __name__ == "__main__":
asyncio.run(main())
在解决 Cloudflare Turnstile 之前,请确保已正确配置扩展程序。接下来,我们将使用 Turnstile 演示 作为示例,演示如何解决 Cloudflare Turnstile。
解决 Turnstile 后,会将一个令牌注入名为 cf-turnstile-response 的输入元素中。在继续下一步(如点击登录)时,此令牌会自动携带以进行验证。
import asyncio
import time
from crawl4ai import *
# TODO: 设置您的配置
user_data_dir = "/browser-profile/Default1"
browser_config = BrowserConfig(
verbose=True,
headless=False,
user_data_dir=user_data_dir,
use_persistent_context=True,
proxy="http://127.0.0.1:13120",
)
async def main():
async with AsyncWebCrawler(config=browser_config) as crawler:
result_initial = await crawler.arun(
url="https://recaptcha-demo.appspot.com/recaptcha-v2-checkbox.php",
cache_mode=CacheMode.BYPASS,
session_id="session_captcha_test"
)
# 稍后做些事情
time.sleep(300)
if __name__ == "__main__":
asyncio.run(main())
在解决 AWS WAF 之前,请确保 CapSolver 扩展程序已正确配置。在此示例中,我们将使用 AWS WAF 演示 来演示该过程。
一旦解决 AWS WAF,将获得一个名为 aws-waf-token 的 cookie。此 cookie 会在后续操作中自动携带以进行验证。
import asyncio
import time
from crawl4ai import *
# TODO: 设置您的配置
user_data_dir = "/browser-profile/Default1"
browser_config = BrowserConfig(
verbose=True,
headless=False,
user_data_dir=user_data_dir,
use_persistent_context=True,
proxy="http://127.0.0.1:13120",
)
async def main():
async with AsyncWebCrawler(config=browser_config) as crawler:
result_initial = await crawler.arun(
url="https://nft.porsche.com/onboarding@6",
cache_mode=CacheMode.BYPASS,
session_id="session_captcha_test"
)
# 稍后做些事情
time.sleep(300)
if __name__ == "__main__":
asyncio.run(main())
如果您需要主动选择何时解决验证码,请使用以下代码:

您需要将扩展程序的 manualSolving 参数设置为 true。否则,扩展程序会自动触发验证码解决。
import asyncio
import time
from crawl4ai import *
# TODO: 设置您的配置
user_data_dir = "/browser-profile/Default1"
browser_config = BrowserConfig(
verbose=True,
headless=False,
user_data_dir=user_data_dir,
use_persistent_context=True,
proxy="http://127.0.0.1:13120",
)
async def main():
async with AsyncWebCrawler(config=browser_config) as crawler:
result_initial = await crawler.arun(
url="https://nft.porsche.com/onboarding@6",
cache_mode=CacheMode.BYPASS,
session_id="session_captcha_test"
)
# 稍后做些事情
time.sleep(6)
js_code = """
let solverButton = document.querySelector(\'#capsolver-solver-tip-button\');
if (solverButton) {
// 点击事件
const clickEvent = new MouseEvent(\'click\', {
bubbles: true,
cancelable: true,
view: window
});
solverButton.dispatchEvent(clickEvent);
}
"""
print(js_code)
run_config = CrawlerRunConfig(
cache_mode=CacheMode.BYPASS,
session_id="session_captcha_test",
js_code=js_code,
js_only=True,
)
result_next = await crawler.arun(
url="https://nft.porsche.com/onboarding@6",
config=run_config
)
print("JS 执行结果:", result_next.js_execution_result)
time.sleep(300)
if __name__ == "__main__":
asyncio.run(main())
Crawl4AI 与 CapSolver 的官方合作标志着网页数据抓取领域的一个重要里程碑。通过将 Crawl4AI 的高效爬取能力与 CapSolver 的强大验证码解决服务相结合,开发者现在可以构建更稳定、高效和健壮的自动化爬虫系统。
无论处理复杂的动态内容还是各种反机器人机制,这种集成解决方案都表现出色且灵活。API 集成提供了细粒度的控制和更高的准确性,而浏览器扩展集成简化了配置过程,满足不同场景的需求。
Q1: Crawl4AI 和 CapSolver 集成是什么,它是如何解决验证码的?
A1: 该集成将 Crawl4AI 的先进网页爬取功能与 CapSolver 的自动化验证码解决功能相结合。它可以绕过 reCAPTCHA v2/v3、Cloudflare Turnstile 和 AWS WAF 等验证码,实现无需人工干预的不间断、高效的网页数据提取。
Q2: 对网页抓取的主要优势是什么?
A2: 主要优势包括自动化处理验证码、更快更可靠的爬取、对反机器人机制的更强鲁棒性,以及通过减少人工验证码解决来降低运营成本。
Q3: 它如何处理不同的验证码类型?
A3: 通过 API 和浏览器扩展方法,它可以解决:
Q4: Crawl4AI 的核心功能是什么,用于 AI 和数据提取?
A4: Crawl4AI 提供结构化的 Markdown 内容用于 AI 代理,具有代理和会话管理的高级浏览器控制,自适应高性能爬取,避免机器人检测的隐身模式,以及用于登录会话的身份感知爬取。