Skip to content

Pydoll Logo

Pydoll

Pydoll 通过 Chrome DevTools Protocol 自动化 Chromium 浏览器,无需 webdriver,也无需手动等待。用它来抓取数据、测试 Web 应用,以及在异步 Python 中自动化真实的浏览器工作流。

安装

$ pip install pydoll-python

---> 100%

Pydoll 驱动你机器上已安装的 Chrome 或 Edge。你无需下载 webdriver,也无需让 driver 版本与浏览器保持同步。

第一次使用 Pydoll?跟随 快速开始 完成一次完整的上手演练。

快速上手

打开一个页面,用你向别人描述元素的方式来查找它们,并以拟人化的节奏进行交互:

import asyncio

from pydoll.browser.chromium import Chrome


async def main():
    async with Chrome() as browser:
        tab = await browser.start()
        await tab.go_to('https://github.com/autoscrape-labs/pydoll')

        star_button = await tab.find(
            tag_name='button',
            timeout=5,
            raise_exc=False
        )
        if not star_button:
            print('Button not found.')
            return

        await star_button.click()
        await asyncio.sleep(3)

asyncio.run(main())

当目标是数据而非交互时,定义一个模型,让 Pydoll 提取它,并完成类型标注与校验:

import asyncio

from pydoll.browser.chromium import Chrome
from pydoll.extractor import ExtractionModel, Field


class Quote(ExtractionModel):
    text: str = Field(selector='.text')
    author: str = Field(selector='.author')
    tags: list[str] = Field(selector='.tag')


async def main():
    async with Chrome() as browser:
        tab = await browser.start()
        await tab.go_to('https://quotes.toscrape.com')

        quotes = await tab.extract_all(Quote, scope='.quote', timeout=5)
        for quote in quotes:
            print(f'{quote.author}: {quote.text}')

asyncio.run(main())

模型支持 CSS 和 XPath 选择器、HTML 属性定位、自定义转换以及嵌套模型。更多内容见 结构化提取。

为什么选择 Pydoll

  • 无需 webdriver:Pydoll 通过 Chrome DevTools Protocol 直接连接浏览器。没有需要下载的东西,也没有版本不匹配需要排查。
  • 拟人化交互:点击沿着弯曲的鼠标轨迹移动,打字带有可变的节奏并偶尔出现随即被修正的拼写错误,因此你的自动化表现得像一个真人在键盘前操作。
  • 异步为本:基于 asyncio 构建,因此一个进程可以并发驱动多个标签页和浏览器。
  • Cloudflare Turnstile 处理:Pydoll 检测 Turnstile 组件并原生点击它。无需付费或集成外部 captcha 服务。
  • 网络控制:在页面发起请求时监控、拦截并修改它们。
  • 类型化提取:声明一个 Pydantic 模型,得到经过校验、对 IDE 友好的对象,而不是原始元素。

下一步

Top Sponsors

Sponsors

赞助商让项目得以持续运转,并帮助资助后续开发。感谢每一位支持 Pydoll 的人。

许可证

Pydoll 以 MIT License 发布,因此你可以在个人和商业项目中自由使用它。