playwright加载用户数据和插件
playwright相对于selenium来说好用太多,稳定性也高,开箱即用,不需要额外的配置。如果你是熟悉selenium,建议转向playwright;如果你首次接触浏览器自动化,应该毫不犹豫地选择playwright。
playwright唯一的缺点可能是出现较晚,用户量较少,可查阅的文档资料少。playwright官方文档。
加载用户数据和插件
默认情况下,playwright启动纯净的浏览器,不带任何用户数据和插件,某些情况下,我们希望保留用户信息,以登录状态访问网站,或者保留插件功能。
接下来以Chromium为例,使用playwright加载用户数据和插件。
- 用户数据,启动时指定用户数据目录,chromium会从目录读取数据,并保存修改。
- 插件,目前只支持文件夹(已解压的扩展程序)
以下代码展示了加载用户数据和插件Octotree - GitHub code tree
和igg学术访问助手
。
import asyncio
import os
from playwright.async_api import async_playwright, Playwright# 用户数据目录
user_data_dir = os.path.join(os.path.dirname(__file__), "user_data")
# igg插件
path_to_igg = os.path.join(os.path.dirname(__file__), "igg_2.3.4.0")
# github文件树浏览插件
path_to_octotree = os.path.join(os.path.dirname(__file__), "octotree")async def run(playwright: Playwright):context = await playwright.chromium.launch_persistent_context(user_data_dir,headless=False,# executable_path=r'C:\Program Files\Google\Chrome\Application\chrome.exe',args=[f"--disable-extensions-except={path_to_igg},{path_to_octotree}",f"--load-extension={path_to_igg},{path_to_octotree}",],)# if len(context.background_pages) == 0:# background_page = await context.wait_for_event('backgroundpage')# else:# background_page = context.background_pages[0]# await background_page.goto('https://www.baidu.com')# Test the background page as you would any other page.page = await context.new_page()# 经过尝试发现,启动浏览器后需要重新加载igg插件,否则其功能不奏效await page.goto("chrome://extensions")await page.locator('#extensions-section extensions-item', has_text='iGG谷歌学术助手').locator('#maskedImage').click()await asyncio.sleep(3)await page.close()page = await context.new_page()await page.goto("https://www.flickr.com/people/julia_sysoeva/")page = await context.new_page()await page.goto('https://github.com/QwenLM/Qwen-Agent')await asyncio.sleep(5)await context.close()async def main():async with async_playwright() as playwright:await run(playwright)asyncio.run(main())
以下几点需要注意
- 用户数据目录,可以直接指定到本机Google浏览器的用户目录,但是注意自动化控制浏览器也会对目录数据进行修改,推荐指定新的目录作为用户数据目录,数据修改是可以保存的。Google浏览器用户目录在
C:\Users\用户名\AppData\Local\Google\Chrome\User Data
。 - 直接解压获取插件,对于部分插件提供了crx文件(按zip格式解压即可)或者压缩包,直接下载并解压即可。但是注意
这种方式解压得到的插件可能无法正常工作,比如上文的igg助手,经过调试发现,直接解压得到的manifest.json与正常安装得到的manifest.json内容不一样,安装过程中应该是进行了一些版本检测、校验加密工作,生成了一个key,插件功能会用到这个key,导致这种安装安装方式igg助手无法正常工作。
- 先使用浏览器安装插件,然后找到插件对应的id,以igg为例
然后到C:\Users\用户名\AppData\Local\Google\Chrome\User Data\Default\插件id
目录下,即可找到解压的插件文件,manifest.json中包含key。
- 经过调试发现,igg插件在每次自动启动浏览器后需要到插件页面重新加载,其功能才生效,暂不清楚原因。