Pyppeteer库之二:Pyppeteer的浏览器对象

启动器Launcher

启动方式:

  • launch :启动链接一个新的浏览器
  • content :链接已打开的浏览器,便于崩溃后重链

1 launch()
pyppeteer.launch(options: dict = None, **kwargs: Any) -> Browser

启动一个新的浏览器,返回 Browser 类。接受字典键值对的关键字配置参数。


常用参数:

  • headless(bool): 是否启用"无头模式"(隐藏浏览器界面),默认为 True 。
  • executablePath(str): 指定 Chromium.exe 文件的路径(不使用内置的chromium)。
  • slowMo(int|float):按指定的毫秒数减慢 pyppeteer 的速度。
  • args(List[str]): 启动 Chromium 的参数。
  • dumpio(bool):是否将浏览器进程标准输出和标准错误输入到 process.stdout 和 process.stderr中。默认是 False。
  • userDataDir(str): 设置用户数据目录。
  • devtools(bool): 是否为每个选项卡自动打开 DevTools 面板, 这个选项只有当 headless 设置为 False的时候有效。

args—>启动chrome的参数:
https://peter.sh/experiments/chromium-command-line-switches/


launch常用参数配置:

kwargs = {
    # 启用浏览器界面
    'headless': False,
    # 多开页面,解决卡死
    'dumpio': True,
    # 设置浏览器全屏
    'args': ['--start-maximized',
             # 取消沙盒模式,沙盒模式下权限太小
             '--no-sandbox',
             # 设置浏览器界面大小
             '--window-size=1366,768',
             # 关闭受控制提示:比如,Chrome正在受到自动测试软件的控制...
             '--disable-infobars',
             # 允许跨域
             '--disable-web-security',
             # 使用代理
             '--proxy-server=127.0.0.1:80',
             # 不走代理的链接
             '--proxy-bypass-list=*',
             # 忽略证书错误
             '--ignore-certificate-errors',
             # log 等级设置,如果出现一大堆warning,可以不使用默认的日志等级
             '--log-level=3',
             # 设置ua
             '--user-agent=Mozilla/5.0'
             ],
    'userDataDir': r'D:\Temporary',
    # 用户数据保存目录,这个最好指定一个,
    # 如果不指定,Chrome会自动创建一个临时目录使用,在退出浏览器时自动删除,
    # 在删除的时候可能会删除失败(不知道为什么出现权限问题,我用Windows)导致浏览器退出失败
    # 删除失败时出现报错:OSError: Unable to remove Temporary User Data
    # 或者Chrome进程没有退出,cpu狂飙到99%
}


2 content()
pyppeteer.connect(options: dict = None, **kwargs: Any) -> Browser

链接已打开的浏览器,返回 Browser 类。接受字典键值对的关键字配置参数。


参数:

  • browserWSEndpoint(str):要连接的浏览器 websocket 端点。(必填
  • ignoreHTTPSErrors(bool):是否忽略 HTTPS 错误。默认为 False。
  • slowMo(int | float):按指定的毫秒数减慢pyppeteer的速度。
  • logLevel(int | str):用于打印日志的日志级别。默认值与根记录器相同。
  • loop(asyncio.AbstractEventLoop):事件循环(实验)。

browserWSEndpoint 的值获取:Browser.wsEndpoint

例子:

import asyncio
import pyppeteer


async def main():
    browser = await pyppeteer.launch({'headless': False})
    page = await browser.newPage()
    await page.setViewport({'width': 1366, 'height': 768})
    await page.goto('https://www.baidu.com')
    ws = browser.wsEndpoint
    print(ws)

    await browser.disconnect()  # 断开链接
    browser2 = await pyppeteer.connect({'browserWSEndpoint': ws})
    await browser2.close()


asyncio.get_event_loop().run_until_complete(main())


浏览器Browser


常用属性和方法:
  • process:返回浏览器进程,如果浏览器实例是由 connect 方法创建的则返回 null。
  • browserContexts:返回一个包含所有打开的浏览器上下文的列表。在新创建的浏览器中,这将返回 [BrowserContext]的单个实例。
  • wsEndpoint: 返回 websocket 端点 url,用于connect 方法重链。
  • pages():获取所有可见的标签页。
  • newPage():新建标签页。
  • close():关闭 Chromium 及其所有页面。Browser 对象本身被认为是处理过的并不能再被使用。
  • disconnect():断开 Pyppeteer 和浏览器的连接,但 Chromium 进程仍然在运行。在调用 disconnect 之后,Browser 对象本身被认为是处理过的并不能再被使用。
  • createIncognitoBrowserContext():创建一个新的隐身浏览器上下文。这不会与其他浏览器上下文共享 cookie / 缓存。
  • userAgent():返回浏览器原始的 user-agent。页面可以使用 page.setUserAgent 覆盖浏览器的 user-agent。

注:被 async 关键字修饰的方法是异步方法,调用的时候也必须 await 关键字修饰。

示例:

import asyncio
from pyppeteer import launch


async def main():
    browser = await launch({'headless': False})
    page = await browser.newPage()
    await page.goto('https://www.baidu.com')
    print(browser.process)     # 属性不被 async 关键字修饰
    print(browser.wsEndpoint)
    print(browser.browserContexts)
    print(await browser.userAgent())
    print(await browser.pages())
    print(await browser.version())
    print(browser.targets())  # 这个方法在源码中不被 async 关键字修饰
    await browser.close()


asyncio.get_event_loop().run_until_complete(main())


BrowserContext

启动浏览器时,默认情况下使用单个 BrowserContext。
方法 browser.newPage() 在默认浏览器中创建页面背景。

Pyppeteer允许创建隐身浏览器(无痕模式)上下文。如下方法:
browser.createInnamitoBrowserContext()

隐身浏览器上下文不会将任何浏览器数据写入磁盘。


无痕模式:

import asyncio
from pyppeteer import launch


async def main():
    # 创建浏览器实例
    browser = await launch({'headless': False})
    # 启动无痕模式
    context = await browser.createIncognitoBrowserContext()
    # 新建标签页
    page = await context.newPage()
    # 打开目标 url
    await page.goto('https://www.baidu.com')
    # 打印是否无痕模式
    print(context.isIncognito())
    # 关闭无痕模式
    await context.close()
    # 关闭浏览器
    await browser.close()


asyncio.get_event_loop().run_until_complete(main())

你可能感兴趣的:(python爬虫)