【问题标题】:Running Selenium WebDriver using Python with extensions (.crx files)使用带有扩展名(.crx 文件)的 Python 运行 Selenium WebDriver
【发布时间】:2013-05-23 22:25:22
【问题描述】:

我去了Chrome Extension Downloader 为“Adblock-Plus_v1.4.1”获取 .crx 文件。

我把它扔到我正在工作的目录中,然后运行:

from selenium import webdriver

chop = webdriver.ChromeOptions()
chop.add_extension('Adblock-Plus_v1.4.1.crx')
driver = webdriver.Chrome(chrome_options = chop)

它完全承认它的存在,但它给了我一个看起来像ChromeDriver.exe 风格的消息:

ERROR:extension_error_reporter.cc(56)] Extension error: Package is invalid: 'CRX_PUBLIC_KEY_INVALID'.

然后最终出现 webdriver 异常:

selenium.common.exceptions.WebDriverException: Message: u'Extension could not be installed'

我几乎 100% 确定我的代码没有任何问题,因为它在抛出异常之前首先放置了 ChromeDriver 类型的消息。

我还尝试通过打开开发者模式转到chrome://extensions/ 上的'C:\Documents and Settings\\*UserName*\Local Settings\Application Data\Google\Chrome\User Data\Default\Extensions' 自己打包它,尝试使用创建的那个.crx 并得到完全相同的错误消息

我也尝试了不同的方法:

chop = webdriver.ChromeOptions()
chop.add_argument('--load_extension=Adblock-Plus_v1.4.1.crx')
driver = webdriver.Chrome(chrome_options = chop)

这不会导致异常,甚至不会导致 Chrome 驱动程序错误,但如果我手动转到 chrome://extensions/,它并没有说扩展程序已加载...

我认为我的问题与实际的 .crx 文件本身有关。由于错误消息的性质......但同时,我不确定,因为如果我生成一个webdriver.Chrome() 会话,然后手动转到chrome://extensions/,我可以物理拖放安装相同.crx 文件。

编辑:我意识到我实际上并没有提出问题,所以这里是:

我做错了什么?为什么我不能加载这个 chrome 扩展?是我的代码,还是 .crx 文件本身?

更新:@Pat Meeker 我已经尝试过了,但我在从 java 到 python 的翻译中丢失了一些东西

capability = webdriver.DesiredCapabilities.CHROME 返回一个字典,其中包含我在i 中的所有参数,所以我很确定我需要做的唯一部分就是添加参数。

options = webdriver.ChromeOptions()
options.add_argument('--user-data-dir=C:/Users/USER_NAME/AppData/Local/Google/Chrome/User Data/Default/')

这就是我现在拥有的,每当我尝试 driver = webdriver.Chrome(chrome_options=options) 时,chrome 就会打开,它似乎记得它以前的位置,但仅此而已,没有书签,没有扩展,什么都没有。

【问题讨论】:

  • 您要测试实际添加扩展的过程吗?或者你只需​​要扩展?如果是后者,您应该能够使用特定的 chrome 用户配置文件手动添加扩展程序(一次),然后在您的测试中 - 使用相同的配置文件设置您的 WebDriver,并且扩展程序应该在那里。这是使用配置文件设置 WebDriver 的答案:stackoverflow.com/a/15270384/2386700

标签: python google-chrome google-chrome-extension selenium-webdriver


【解决方案1】:

只需在你的程序中添加这一额外的行

from selenium.webdriver.chrome.options import Options 它会起作用的...

喜欢这个

from selenium import webdriver
from selenium.webdriver.chrome.options import Options

chop = webdriver.ChromeOptions()
chop.add_extension('Adblock-Plus_v1.4.1.crx')
driver = webdriver.Chrome(chrome_options = chop)

【讨论】:

  • 如何在 linux 中做同样的事情?
【解决方案2】:

根据我的经验,问题出在load-extesion 参数上,而不是您的代码,因为我在测试不是来自 Chrome 网上应用店的扩展程序时遇到了同样的问题。 我设法通过使用Drag & Drop 安装扩展并仅使用--user-data-dir 参数来解决它。

这对我来说适用于 C# 和 Chrome 33,我知道这听起来很脆弱,但它现在对我有用几个月,所以我希望它会有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-07-12
    • 2021-01-13
    • 1970-01-01
    • 1970-01-01
    • 2018-05-24
    • 2015-09-28
    • 1970-01-01
    相关资源
    最近更新 更多