MacOS Python Selenium 自动化操作浏览器插件
文章目录
- MacOS Python Selenium 自动化操作浏览器插件
- 前言:MacOS + Python + Selenium 自动化操作插件
- 一、资源下载
- 1.1 chrome-for-testing & ChromeDriver
- 二、Selenium调用Chrome 浏览器(指定浏览器工具)
- 三、浏览器缓存-另存为
- 3.1 什么是「浏览器缓存另存为」?
- 3.2 应用场景
- 3.3 怎么实现(MacOS)
- 四、Selenium打开指定浏览器缓存数据并跳转至插件
前言:MacOS + Python + Selenium 自动化操作插件
- 在区块链和 Web3 自动化测试中,浏览器插件往往是关键环节。
- 传统的 Selenium 自动化网页操作已经非常成熟,但涉及到插件时,尤其在MacOS 系统中,操作的复杂度和兼容性问题会显著增加。
本篇内容将基于以下环境,实现一套完整的插件自动化流程:
- ✅MacOS (Apple Silicon)
- ✅Python + Selenium
- ✅Chrome for Testing
- ✅插件
目标是实现以下功能:
- 📂 加载浏览器缓存(保留登录态和插件)
- 🚀 启动指定插件环境
- 🤖 自动化操作插件内部页面元素(如点击账户名等)
通过合理配置--user-data-dir、使用正确版本的 ChromeDriver 与 Chrome,并结合 Selenium 的自动化控制能力,你将可以:
- 自动登录插件
- 快速切换账户环境
- 批量运行 Web3 操作或自动化测试脚本
这将极大提升 Web3 自动化测试的效率与稳定性 💪
一、资源下载
1.1 chrome-for-testing & ChromeDriver
下载地址:
https://googlechromelabs.github.io/chrome-for-testing/
我的设备是MacOs Apple M2 Pro
二、Selenium调用Chrome 浏览器(指定浏览器工具)
fromseleniumimportwebdriverfromselenium.webdriver.chrome.serviceimportServicefromselenium.webdriver.chrome.optionsimportOptions# 配置 Chrome 的路径和 ChromeDriver 的路径chrome_driver_path="./chromedriver"# 你下载并解压的 ChromeDriver 路径chrome_exe_path="./chrome-mac-arm64/Google Chrome for Testing.app/Contents/MacOS/Google Chrome for Testing"# 设置 ChromeOptionschrome_options=Options()chrome_options.binary_location=chrome_exe_path# 指定 Chrome 浏览器路径# 创建 WebDriver 服务service=Service(chrome_driver_path)# 启动浏览器driver=webdriver.Chrome(service=service,options=chrome_options)# 获取浏览器信息capabilities=driver.capabilitiesprint("Browser details:",capabilities)# 打开页面driver.get("https://www.google.com")# 打印页面标题print(driver.title)# 关闭浏览器driver.quit()三、浏览器缓存-另存为
3.1 什么是「浏览器缓存另存为」?
将浏览器的用户数据目录(即浏览器配置文件、登录状态、插件、缓存等)持久化保存到本地目录中,以便下次继续使用。
3.2 应用场景
- 自动登录保持、比如你登录了插件,关闭浏览器后再次打开仍然保持登录状态;
- 多账号配置、你可以为每个账号建一个配置文件目录,互不干扰;
- 提高效率、避免每次初始化插件或重载缓存,节省测试/操作时间
3.3 怎么实现(MacOS)
"/路径/Google Chrome for Testing"--user-data-dir="/路径/ChromeProfiles/插件数据存储目录名称"四、Selenium打开指定浏览器缓存数据并跳转至插件
importosimportsubprocessimportsignalimporttimefrom seleniumimportwebdriver from selenium.webdriver.chrome.serviceimportService from selenium.webdriver.chrome.optionsimportOptions# =======================# 一、配置路径(需根据实际环境修改)# =======================# ChromeDriver 可执行文件路径(与 Chrome 版本匹配)chrome_driver_path="/路径/chromedriver"# Chrome 浏览器路径(Chrome for Testing 或系统 Chrome)chrome_exe_path="/路径/chrome/Google Chrome for Testing.app/Contents/MacOS/Google Chrome for Testing"# 指定缓存目录(user-data-dir),用于加载已有登录状态、插件、Cookie 等user_data_dir="/路径/ChromeProfiles/插件数据存储目录名称"# 插件的扩展 ID(可在 chrome://extensions 中查看)plugin_id="插件ID"plugin_home_url=f"chrome-extension://{plugin_id}/home.html"# =======================# 二、清理可能已占用缓存目录的 Chrome 进程# =======================def kill_chrome_using_profile(profile_path):""" 杀掉当前运行中使用同一 user-data-dir 的 Chrome 进程,避免冲突""" try:# 查找包含 "Google Chrome for Testing" 名称的进程result=subprocess.check_output(["pgrep","-fl","Google Chrome for Testing"],text=True)forlineinresult.strip().split("\n"):ifprofile_pathinline: pid=int(line.strip().split()[0])print(f"⚠️ 检测到已占用 user-data-dir 的 Chrome 进程 PID: {pid},正在终止...")os.kill(pid, signal.SIGKILL)except subprocess.CalledProcessError:# 没有匹配进程时不会报错pass kill_chrome_using_profile(user_data_dir)# =======================# 三、配置 Chrome 启动参数# =======================chrome_options=Options()chrome_options.binary_location=chrome_exe_path# 设置 Chrome 可执行文件路径chrome_options.add_argument(f"--user-data-dir={user_data_dir}")# 加载指定缓存目录chrome_options.add_argument("--disable-gpu")chrome_options.add_argument("--no-sandbox")chrome_options.add_argument("--remote-debugging-port=9222")# 可选:用于调试chrome_options.add_experimental_option('detach', True)# 启动后不自动关闭# =======================# 四、启动浏览器实例# =======================service=Service(chrome_driver_path)driver=webdriver.Chrome(service=service,options=chrome_options)# =======================# 五、跳转到插件页面(插件主页地址)# =======================driver.get(plugin_home_url)# 等待页面加载time.sleep(3)# 不调用 driver.quit() 以便调试时浏览器保持开启、比如点击插件内部某个元素driver.quit()