You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Playwright(Python)与MetaMask交互并实现自动化操作?

Playwright + Python 自动化MetaMask全流程操作指南

一、正确加载MetaMask扩展

Playwright加载Chrome扩展必须使用persistent_context(持久化上下文),临时上下文无法保留扩展状态,操作步骤如下:

  • 提前准备MetaMask扩展包(可从Chrome应用商店获取CRX文件,或使用本地已安装的扩展文件夹路径)
  • 启动浏览器时配置扩展参数,示例代码:
from playwright.sync_api import sync_playwright
import os

with sync_playwright() as p:
    # MetaMask默认扩展ID(可根据实际安装情况调整)
    metamask_ext_id = "nkbihfbeogaeaoehlefnkodbefgpgknn"
    # 扩展文件夹路径
    ext_path = os.path.abspath("./metamask_extension")
    
    # 启动带扩展的持久化上下文
    context = p.chromium.launch_persistent_context(
        user_data_dir="./chrome_profile",  # 保存浏览器状态,避免重复配置
        headless=False,  # 扩展在无头模式下兼容性差,建议先禁用
        args=[
            f"--disable-extensions-except={ext_path}",
            f"--load-extension={ext_path}"
        ]
    )
    # 打开MetaMask扩展页面
    metamask_page = context.new_page()
    metamask_page.goto(f"chrome-extension://{metamask_ext_id}/home.html")

二、处理MetaMask首次配置

若MetaMask未完成初始化,可自动化完成创建/导入钱包流程:

# 跳过欢迎页
metamask_page.click('text="Get Started"')
# 选择导入钱包(或点击"Create a Wallet"创建新钱包)
metamask_page.click('text="Import Wallet"')
# 跳过隐私提示
metamask_page.click('text="I Agree"')
# 填入助记词
metamask_page.fill('input[placeholder="Paste your secret recovery phrase here"]', "your-mnemonic-phrase-here")
# 设置密码
metamask_page.fill('input[placeholder="New password"]', "your-secure-password")
metamask_page.fill('input[placeholder="Confirm password"]', "your-secure-password")
# 勾选协议并提交
metamask_page.click('input[type="checkbox"]')
metamask_page.click('text="Import"')
# 完成初始化收尾
metamask_page.click('text="Got it"')
metamask_page.click('text="Next"')
metamask_page.click('text="Done"')

三、网络配置自动化

切换或添加自定义网络的操作逻辑:

# 打开网络选择器
metamask_page.click('button[data-testid="network-display"]')
# 选择Goerli测试网(或点击"Add Network"添加自定义网络)
metamask_page.click('text="Goerli Test Network"')
# 等待网络切换完成
metamask_page.wait_for_selector('text="Goerli"')

# 若添加自定义网络,示例代码:
# metamask_page.click('text="Add Network"')
# metamask_page.fill('input[placeholder="Network Name"]', "Custom Network")
# metamask_page.fill('input[placeholder="New RPC URL"]', "https://your-rpc-url")
# metamask_page.fill('input[placeholder="Chain ID"]', "123")
# metamask_page.fill('input[placeholder="Currency Symbol"]', "CS")
# metamask_page.click('text="Save"')

四、识别正确的MetaMask页面

避免重复打开页面,可通过URL匹配定位目标页面:

def get_metamask_target_page(context, ext_id):
    for page in context.pages:
        if ext_id in page.url and ("home" in page.url or "confirm-transaction" in page.url):
            return page
    return None

# 使用示例
target_page = get_metamask_target_page(context, metamask_ext_id)

也可监听页面创建事件,自动捕获MetaMask页面:

metamask_active_page = None
def capture_metamask_page(page):
    global metamask_active_page
    if metamask_ext_id in page.url:
        metamask_active_page = page

context.on("page", capture_metamask_page)

五、交易批准/拒绝自动化

当DApp发起交易后,MetaMask会弹出确认页面,处理逻辑如下:

# 等待交易确认页面加载
tx_confirm_page = context.wait_for_page(
    lambda page: metamask_ext_id in page.url and "confirm-transaction" in page.url
)
# 批准交易
tx_confirm_page.click('button[data-testid="confirm-button"]')
# 若拒绝交易,替换为:
# tx_confirm_page.click('button[data-testid="reject-button"]')

资源推荐

  • Playwright官方文档:重点查看「Chrome Extensions」章节,掌握扩展加载与上下文管理的核心规则。
  • MetaMask开发者文档:熟悉MetaMask的UI结构、事件触发逻辑,帮助精准定位元素选择器。
  • 开源社区示例:搜索Playwright + MetaMask + Python的开源仓库,参考成熟的自动化脚本实现思路。
  • 专业书籍:《Playwright for Python: A Practical Guide》涵盖浏览器扩展自动化的实战内容,适合系统学习。

内容的提问来源于stack exchange,提问作者Plinio Mabesi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 01:54:13