如何解决Selenium加载Metamask扩展时PermissionError: [Errno 13]权限错误
问题原因
- 核心错误原因:
options.add_extension()方法要求传入的是Chrome扩展的*.crx压缩包文件路径,你当前传入的是解压后的Metamask扩展文件夹路径,系统无法将文件夹作为文件读取,所以触发PermissionError,和管理员权限无关。 - 附加代码错误:你使用
find_element_by_css_selector()方法时传入了XPath路径,后续就算插件加载成功也会触发选择器匹配错误。同时Metamask加载后会自动新开标签页,没有切换标签的话也无法在谷歌首页找到插件的元素。
解决步骤
- 首先获取Metamask 9.8.4版本的crx安装包,可以从Chrome扩展商店下载对应版本的crx文件,也可以在Chrome扩展管理页面开启开发者模式,把本地解压的扩展文件夹打包成crx格式,将生成的crx文件放到你的项目目录下,比如命名为
metamask-9.8.4.crx。 - 修改代码中加载扩展的行,替换为crx文件路径:
options.add_extension('metamask-9.8.4.crx')
- 修正选择器调用错误,使用XPath路径匹配元素要调用对应的XPath方法,同时补充切换到Metamask标签页的逻辑。
修正后完整代码
from selenium import webdriver from selenium.webdriver.chrome.options import Options import time options = Options() options.add_extension('metamask-9.8.4.crx') driver = webdriver.Chrome('./chromedriver', options = options) # 等待扩展加载完成 time.sleep(5) # 切换到Metamask新开的标签页 driver.switch_to.window(driver.window_handles[1]) get_started_button = driver.find_element_by_xpath('//*[@id="app-content"]/div/div[3]/div/div/div/button') get_started_button.click() input('Press [ENTER] to close browsers...') driver.quit()
内容的提问来源于stack exchange,提问作者noromon99
相关产品推荐
相关产品推荐

