访问网站
goto (url: str, options: dict = None, **kwargs: Any
) -> Optional[Response]
options:
- timeout(int): 跳转等待时间,单位是毫秒, 默认是30秒, 传 0 表示无限等待。
- waitUntil(str|List[str]):满足什么条件认为页面跳转完成,默认是 load 事件触发时(页面加载完毕)。其它事件如下:
domcontentloaded - DOM 树构建完成
networkidle0 - 不再有网络连接时触发(至少500毫秒后)
networkidle2 - 只有2个网络连接时触发(至少500毫秒后)
DOM文档的加载步骤为:
解析HTML结构。
加载外部脚本和样式表文件。
解析并执行脚本代码。
DOM树构建完成。//domcontentloaded
加载图片等外部文件。
页面加载完毕。//load
示例:
await page.goto('https://www.baidu.com/', {
# 配置项 等待网络状态为空闲的时候才继续执行
'waitUntil': 'networkidle0'
})
注:page.goto 要么抛出错误,要么返回主页面的响应。唯一例外是打开空白页 about:blank,返回 null 。
截图
可以全屏截图、元素截图,语法如下:
screenshot (options: dict = None, **kwargs: Any )
options:
- path (str):保存图片的文件路径。截图将从文件扩展名推断类型。
- fullPage (bool):是否滚动页面。默认为 False。
- clip (dict):指定页面裁剪区域。此选项需要以下参数:
x (int) - 剪辑区域左上角的X坐标。
y (int) - 剪辑区域左上角的Y坐标。
width (int) - 裁剪区域的宽度。
height (int) - 剪裁区域的高度。
例子:
import asyncio
from pyppeteer import launch
width, height = 1366, 768
async def main():
browser = await launch({
'headless': False,
'args': [f'--window-size={width},{height}']
})
page = await browser.newPage()
await page.setViewport({
'width': width, 'height': height})
await page.goto('https://www.baidu.com')
await page.screenshot({
'path': 'baidu.png'}) # 页面截图
element = await page.J('#lg>img') # 查找元素
await element.screenshot({
'path': 'element.png'}) # 元素级截图
await asyncio.sleep(3)
await browser.close()
asyncio.get_event_loop().run_until_complete(main())
注:如果通过 element.screenshot() 元素截图有偏差,这是跟电脑分辨率设置有关。
解决:在显示设置 - 将电脑缩放改为100%
生成PDF
await page.emulateMedia('screen')
await page.pdf({
'path': 'baidu.pdf',
'printBackground': True