快速开始
Pydoll 自动化你已经安装好的 Chrome 或 Edge,所以配置只有两步:安装包,运行脚本。本页带你从一个空文件夹出发,到一个可运行的脚本,它会打开一个真实页面并从中读取数据。
Pydoll 支持两种形式的 API:同步和异步。它们暴露相同的类和方法;同步 API 在每次调用时阻塞,而如果你的项目已经运行在 asyncio 上,或者你想同时驱动多个标签页,就用异步 API。本文档中的每个代码示例都有 Sync 和 Async 两个标签页,选择与你的代码匹配的那个即可。
你将学到
安装 Pydoll
Pydoll 需要 Python 3.10 或更新版本,以及机器上安装的 Google Chrome 或 Microsoft Edge。你无需下载 webdriver;Pydoll 直接与浏览器通信。
创建并激活一个 虚拟环境,然后安装:
如果想改为尝试最新的开发版本,从 GitHub 安装:
编写你的第一个脚本
创建一个名为 first_script.py 的文件:
运行它:
一个 Chrome 窗口打开,加载页面,你的终端打印出第一条名言:
"The world as we have created it is a process of our thinking. It cannot be changed without changing our thinking."
这里发生了三件事:
with Chrome() as browser(异步 API 中为async with)启动了你已安装的 Chrome,并保证在代码块结束时关闭它,即使脚本失败也是如此。browser.start()返回了一个 tab,你将用这个对象来完成导航、元素查找以及页面上的其他一切操作。tab.find(class_name='text')等待元素出现并返回它。你无需添加 sleep 或编写等待循环;find()会重试直到元素出现或超时到期。
同步还是异步?
同步形式从 pydoll.sync 导入,像调用任何普通 Python 函数一样调用方法。异步形式从 pydoll 导入,在 async def 函数内部 await 每个调用,并由 asyncio.run(main()) 启动。目前你需要的 asyncio 就这些;如果还不熟悉,异步 Python 实战 会讲清其余部分。
无头运行
在服务器上或在 CI 中没有显示器,因此要以 headless 方式运行浏览器。在创建浏览器时传入选项:
from pydoll.sync import Chrome, ChromiumOptions
def main():
options = ChromiumOptions()
options.add_argument('--headless=new')
with Chrome(options=options) as browser:
tab = browser.start()
tab.go_to('https://quotes.toscrape.com')
first_quote = tab.find(class_name='text')
print(first_quote.text())
main()
import asyncio
from pydoll import Chrome, ChromiumOptions
async def main():
options = ChromiumOptions()
options.add_argument('--headless=new')
async with Chrome(options=options) as browser:
tab = await browser.start()
await tab.go_to('https://quotes.toscrape.com')
first_quote = await tab.find(class_name='text')
print(await first_quote.text())
asyncio.run(main())
脚本行为完全相同;只是窗口不可见。ChromiumOptions 接受任意 Chromium 命令行参数。值得了解的参数见 浏览器选项。
headless 是可被检测的
headless Chrome 泄露的不只是一个 user agent 字符串。它通过软件光栅化器而非你真实的 GPU 来渲染 WebGL,不暴露任何 PDF 插件,报告的屏幕度量没有任务栏留出的间隙,还缺少媒体设备。反机器人系统会检查所有这些,因此仅仅设置一个 user agent 并不能让 headless 浏览器伪装成 headful,差得很远。如果你自动化那些与机器人对抗的站点,要么以 headful 方式运行,要么用 Fingerprint 注入 中和这些 headless 信号。
下一步
- 你的第一个自动化:登录一个站点,像真人一样交互,并提取类型化数据。
- 带上你的 Playwright 脚本:已经有 Playwright 代码?改一行导入就能跑在 Pydoll 上。
- 保持不被检测:避开明显机器人信号的最小配置。
- 元素查找:用
find()和query()定位元素的每一种方式。