概述
需要使用playwright在chrome中打开chrome://system/,然后点开插件按钮,查看所有的插件内容,过滤出需要的内容。
代码实现
import logging.config
import os
import re
import time
from playwright.sync_api import sync_playwright
logging.config.fileConfig("logger.ini")
logger = logging.getLogger()
configs = None
# 这个是录屏插件的部分名称,用于模糊匹配的
plugin_name = 'screen'
# 用于保存录屏插件pid的文件名称
plugin_pid_file = ''
def getExtensionId(extensionName):
extensionName = extensionName.lower()
"""
根据插件名称,获取自定义插件的id
:param extensionName:
:return:
"""
if not os.path.exists(configs['ext_chrome_path']):
logger.warning('chrome not exist, please check. path:%s' % configs['ext_chrome_path'])
return
url = 'chrome://system/'
with sync_playwright() as playwright:
browser = playwright.chromium.launch_persistent_context(configs['chrome_user_data_dir'],
args=configs['chrome_parameters'],
headless=configs['record_headless'],
executable_path=configs['ext_chrome_path'],
ignore_default_args=['--enable-automation'])
print(f'start to load page,{time.time()}')
page = browser.new_page()
# 打开指定网址
page.goto(url)
# 等待按钮被渲染出来
page.wait_for_selector('id=extensions-value-btn')
# 点击按钮
page.click('id=extensions-value-btn')
# 等待div被显示出来
page.wait_for_selector('id=extensions-value')
# 获取div内部的文本值
text = page.inner_text('id=extensions-value')
print(f'total plugin info: {text}')
if text:
for line in text.splitlines():
(pid, name, version) = re.split(r'\s:\s', line)
if extensionName in name.lower():
return (pid, name)
def get_extension_pid(my_configs):
"""
获取录屏插件的pid,作为chrome参数使用
:return:
"""
global configs, plugin_pid_file
configs = my_configs
plugin_pid_file = configs['plugin_pid_file']
if not has_pid():
logger.info('screen plugin id not exist, need to generate')
generate_pid()
logger.info(f'success to generate screen plugin')
else:
logger.info('screen plugin pid exist, just return')
my_pid = ''
with open(plugin_pid_file, 'r') as f:
my_pid = f.readline()
logger.info(f'final return screen plugin id: {my_pid}')
return my_pid
def has_pid():
"""
判断当前是否存在录屏插件的pid,不存在的话,则需要生成
:return:
"""
return os.path.exists(plugin_pid_file)
def generate_pid():
logger.info('start to get custom plugin id')
(pid, pname) = getExtensionId(plugin_name)
logger.info(f'screen plugin id: {pid}')
logger.info(f'screen plugin name: {pname}')
with open(plugin_pid_file, 'w') as f:
f.write(pid)
if __name__ == "__main__":
generate_pid()