CAPSOLVER
博客
2025 年使用 Botright 和 Python 进行网页抓取

2025 年使用 Botright 和 Python 进行网页抓取

Logo of CapSolver

Rajinder Singh

Deep Learning Researcher

14-Nov-2024

您可能想知道如何使用 BotRight 解决验证码,如何使用它来制作一个简单的爬虫,甚至更好的,一个高级爬虫!
好吧,那么这就是您的教程!

Botright 简介

BotRight 是一个用于网页自动化的 Python 库,专门设计用于应对网站上日益复杂的机器人检测系统。与基本的自动化工具不同,BotRight 不仅限于简单的交互,它提供细致的控制,使自动浏览看起来高度人性化。这种对人类行为模拟的强调对于访问通常会阻止或限制机器人的网站至关重要。

BotRight 建立在 Selenium WebDriver 之上,提供一个高级 API,将复杂的浏览器交互抽象成简单的命令,使初学者和高级用户都能开发出复杂的爬虫和自动化脚本,而无需管理低级浏览器命令。这使得它成为从简单数据收集到需要抵抗机器人检测算法的复杂多步骤网页任务的各种项目的绝佳选择。

为什么选择 BotRight?

BotRight 提供了几个使其在自动化领域中脱颖而出的功能:

  1. 人性化的交互: BotRight 的设计以模拟真实用户行为为中心,例如平滑的鼠标移动、自然的打字模式和时间延迟。这些行为降低了检测风险,并提供了更可靠的访问通常仅限于真实用户的內容。

  2. 浏览器状态持久性: 通过支持浏览器配置文件,BotRight 允许您在多个自动化运行中维护会话状态。此功能对于需要登录持久性的任务或必须保留特定 Cookie 和缓存状态的任务尤其有用。

  3. 易于使用: 尽管功能强大,但 BotRight 的易用性令人惊讶。它的 API 结构简化了复杂的自动化任务,消除了与 Selenium 设置通常相关的许多技术开销。初学者可以快速上手,而专家则可以利用 BotRight 的灵活性构建高度定制的解决方案。

  4. 复杂工作流的可扩展性: BotRight 很好地适应了更高级的任务,包括处理 AJAX 驱动的站点、管理分页数据提取、解决验证码等等。与 CapSolver 等验证码求解器配对,BotRight 可以处理需要绕过验证码的工作流,让您即使面对高度防护的网站也能进行自动化。

  5. 集成的扩展和插件: BotRight 支持包含各种扩展和插件来增强自动化功能。例如,在 BotRight 中使用 CapSolver 等工具可以帮助管理验证码挑战,为抓取或自动化解锁更多网站。


设置 Botright

在开始之前,请确保您的系统上已安装 Python 3.7 或更高版本。按照以下步骤设置 Botright:

  1. 安装 Botright:

    bash 复制代码
    pip install botright
  2. 安装 WebDriver Manager:

    Botright 依赖于 webdriver_manager 包来管理浏览器驱动程序。

    bash 复制代码
    pip install webdriver-manager
  3. 验证安装:

    创建一个新的 Python 文件并导入 Botright 以确保它已正确安装。

    python 复制代码
    from botright import Botright

    如果没有任何错误,则 Botright 已正确安装。


创建基本爬虫

让我们使用 Botright 创建简单的脚本从 quotes.toscrape.com 抓取数据。

抓取引文

脚本: scrape_quotes.py

python 复制代码
from botright import Botright

def scrape_quotes():
    with Botright() as bot:
        bot.get("https://quotes.toscrape.com/")
        quotes = bot.find_elements_by_css_selector("div.quote")
        for quote in quotes:
            text = quote.find_element_by_css_selector("span.text").text
            author = quote.find_element_by_css_selector("small.author").text
            print(f"\"{text}\" - {author}")

if __name__ == "__main__":
    scrape_quotes()

运行脚本:

bash 复制代码
python scrape_quotes.py

输出:

复制代码
“The world as we have created it is a process of our thinking. It cannot be changed without changing our thinking.” - Albert Einstein
...

解释:

  • 我们使用 Botright 作为上下文管理器,确保正确设置和拆卸。
  • 我们使用 bot.get() 导航到网站。
  • 我们找到所有引文元素并提取文本和作者。

处理分页

脚本: scrape_quotes_pagination.py

python 复制代码
from botright import Botright

def scrape_all_quotes():
    with Botright() as bot:
        bot.get("https://quotes.toscrape.com/")
        while True:
            quotes = bot.find_elements_by_css_selector("div.quote")
            for quote in quotes:
                text = quote.find_element_by_css_selector("span.text").text
                author = quote.find_element_by_css_selector("small.author").text
                print(f"\"{text}\" - {author}")

            # 检查是否还有下一页
            next_button = bot.find_elements_by_css_selector('li.next > a')
            if next_button:
                next_button[0].click()
            else:
                break

if __name__ == "__main__":
    scrape_all_quotes()

解释:

  • 我们通过检查 "下一页" 按钮是否可用,循环遍历页面。
  • 我们使用 find_elements_by_css_selector 定位元素。
  • 我们点击 "下一页" 按钮以导航到下一页。

抓取动态内容

脚本: scrape_dynamic_content.py

python 复制代码
from botright import Botright
import time

def scrape_tags():
    with Botright() as bot:
        bot.get("https://quotes.toscrape.com/")
        # 点击 "Top Ten tags" 链接以动态加载标签
        bot.click('a[href="/tag/"]')
        # 等待动态内容加载
        time.sleep(2)
        tags = bot.find_elements_by_css_selector("span.tag-item > a")
        for tag in tags:
            tag_name = tag.text
            print(f"Tag: {tag_name}")

if __name__ == "__main__":
    scrape_tags()

解释:

  • 我们通过点击链接导航到标签页面。
  • 我们使用 time.sleep() 等待动态内容加载。
  • 我们提取并打印标签。

提交表单和登录

脚本: scrape_with_login.py

python 复制代码
from botright import Botright

def login_and_scrape():
    with Botright() as bot:
        bot.get("https://quotes.toscrape.com/login")
        # 填写登录表单
        bot.type('input#username', 'testuser')
        bot.type('input#password', 'testpass')
        bot.click("input[type='submit']")

        # 通过检查注销链接来验证登录
        if bot.find_elements_by_css_selector('a[href="/logout"]'):
            print("Logged in successfully!")

            # 现在抓取引文
            bot.get("https://quotes.toscrape.com/")
            quotes = bot.find_elements_by_css_selector("div.quote")
            for quote in quotes:
                text = quote.find_element_by_css_selector("span.text").text
                author = quote.find_element_by_css_selector("small.author").text
                print(f"\"{text}\" - {author}")
        else:
            print("Login failed.")

if __name__ == "__main__":
    login_and_scrape()

解释:

  • 我们导航到登录页面并填写凭据。
  • 我们通过检查注销链接是否存在来验证登录。
  • 然后我们继续抓取对已登录用户可用的內容。

**注意:**由于 quotes.toscrape.com 允许任何用户名和密码进行演示,因此我们可以使用虚拟凭据。


将 CapSolver 集成到 Botright 中

虽然 quotes.toscrape.com 没有验证码,但许多现实世界中的网站都有。为了应对这种情况,我们将演示如何使用 CapSolver 浏览器扩展 将 CapSolver 集成到我们的 Botright 脚本中。

下载 CapSolver 扩展

  1. 下载扩展:

    • 访问 CapSolver GitHub Releases 页面。
    • 下载最新版本,例如 capsolver-chrome-extension-v0.2.3.zip
    • 将其解压缩到项目根目录下的目录中,例如 ./capsolver_extension

配置 CapSolver 扩展

  1. 定位 config.json

    • 路径:capsolver_extension/assets/config.json
  2. 编辑 config.json

    json 复制代码
    {
      "apiKey": "YOUR_CAPSOLVER_API_KEY",
      "enabledForcaptcha": true,
      "captchaMode": "token",
      "enabledForRecaptchaV2": true,
      "reCaptchaV2Mode": "token",
      "solveInvisibleRecaptcha": true,
      "verbose": false
    }
    • "YOUR_CAPSOLVER_API_KEY" 替换为您的实际 CapSolver API 密钥。
    • 根据您预期的验证码类型将 enabledForcaptcha 和/或 enabledForRecaptchaV2 设置为 true
    • 将模式设置为 "token" 以自动解决。

在 Botright 中加载 CapSolver 扩展

要在 Botright 中使用 CapSolver 扩展,我们需要配置浏览器以在启动时加载扩展。

**注意:**Botright 允许您自定义浏览器选项,包括添加扩展。

修改后的脚本:

python 复制代码
from botright import Botright
from selenium.webdriver.chrome.options import Options
import os

def create_bot_with_capsolver():
    # CapSolver 扩展文件夹的路径
    extension_path = os.path.abspath('capsolver_extension')

    # 配置 Chrome 选项
    options = Options()
    options.add_argument(f"--load-extension={extension_path}")
    options.add_argument("--disable-gpu")
    options.add_argument("--no-sandbox")

    # 使用自定义选项初始化 Botright
    bot = Botright(options=options)
    return bot

解释:

  • 导入 Options
    • selenium.webdriver.chrome.options 导入,以设置 Chrome 选项。
  • 配置 Chrome 选项:
    • 使用 options.add_argument() 添加 CapSolver 扩展。
  • 使用选项初始化 Botright:
    • 在创建实例时将 options 传递给 Botright

带有 CapSolver 集成的示例脚本

我们将通过导航到一个具有 reCAPTCHA 的网站(例如 Google 的 reCAPTCHA 演示)来演示集成。

脚本: scrape_with_capsolver_extension.py

python 复制代码
from botright import Botright
from selenium.webdriver.chrome.options import Options
import os
import time

def solve_captcha_and_scrape():
    # CapSolver 扩展文件夹的路径
    extension_path = os.path.abspath('capsolver_extension')

    # 配置 Chrome 选项
    options = Options()
    options.add_argument(f"--load-extension={extension_path}")
    options.add_argument("--disable-gpu")
    options.add_argument("--no-sandbox")

    # 使用自定义选项初始化 Botright
    with Botright(options=options) as bot:
        bot.get("https://www.google.com/recaptcha/api2/demo")

        # 等待 CapSolver 解决验证码
        print("Waiting for CAPTCHA to be solved...")
        # 根据平均解决时间调整睡眠时间
        time.sleep(15)

        # 通过检查页面内容来验证验证码是否已解决
        if "Verification Success" in bot.page_source:
            print("CAPTCHA solved successfully!")
        else:
            print("CAPTCHA not solved yet or failed.")

if __name__ == "__main__":
    solve_captcha_and_scrape()

解释:

  • 设置 Chrome 选项:
    • 在浏览器会话中包含 CapSolver 扩展。
  • 使用选项初始化 Botright:
    • 在创建 Botright 实例时传递 options
  • 导航到目标站点:
    • 使用 bot.get() 导航到具有 reCAPTCHA 的站点。
  • 等待验证码解决:
    • CapSolver 扩展将自动解决验证码。
    • 使用 time.sleep() 等待;根据需要调整时间。
  • 验证验证码解决方案:
    • 检查页面内容以确认验证码是否已解决。

重要注意事项:

  • 扩展路径:
    • 确保 extension_path 正确指向您的 CapSolver 扩展文件夹。
  • 等待时间:
    • 解决时间可能会有所不同;相应地调整 time.sleep()
  • 驱动程序管理:
    • Botright 在内部管理 WebDriver;传递 options 可以自定义驱动程序。
  • 合规性:
    • 确保您遵守您正在抓取的网站的服务条款。

运行脚本:

bash 复制代码
python scrape_with_capsolver_extension.py

附加代码

CapSolver 获取顶尖验证码解决方案的奖励代码scrape。兑换后,每次充值后您将获得额外的 5% 奖励,无限次。

结论

通过使用 CapSolver 浏览器扩展CapSolver 集成到 Botright 中,您可以在网页抓取项目中自动化验证码解决。这确保了不间断的数据提取,即使从受验证码保护的站点也是如此。

关键要点:

  • Botright 通过人性化的交互简化了网页自动化。
  • CapSolver 浏览器扩展 可以集成到 Botright 脚本中。
  • 正确配置扩展和浏览器选项至关重要。

合规声明: 本博客提供的信息仅供参考。CapSolver 致力于遵守所有适用的法律和法规。严禁以非法、欺诈或滥用活动使用 CapSolver 网络,任何此类行为将受到调查。我们的验证码解决方案在确保 100% 合规的同时,帮助解决公共数据爬取过程中的验证码难题。我们鼓励负责任地使用我们的服务。如需更多信息,请访问我们的服务条款和隐私政策。

更多