从Selenium WebDriver运行chrome扩展

时间:2014-05-23 09:18:14

标签: .net selenium google-chrome-extension selenium-webdriver selenium-chromedriver

我知道如何在selenium webdriver中加载chrome扩展。但我没有看到任何帖子/博客描述我如何运行来自Selenium的Chrome扩展程序。

我需要明确地运行chrome扩展/使其从selenium执行它的功能。例如,我想使用带有Selenium Webdriver的extension来清除Chrome浏览器的缓存。

我可以在第一时间做到吗?或者Selenium WebDriver是否只帮助我将扩展程序加载到浏览器实例中并将其保留在那里?

3 个答案:

答案 0 :(得分:7)

激活Chrome扩展程序后,它已经“正在运行”#34; (至少是它的背景/事件页面)。没有API以编程方式单击按钮。

如果您想轻松使用现有扩展程序的功能,我建议您下载扩展程序的源代码,并在扩展程序的源代码中插入其他事件监听程序。

  1. 获取扩展程序的来源(例如,使用Chrome extension source viewer又名CRX查看器)。
  2. 解压缩zip文件。
  3. 创建一个新的HTML文件example_name.html,并将其包含在内:

    <script src="example_name.js"></script>
    
  4. 创建一个新的脚本文件example_name.js,并让它调用扩展程序的功能,例如:

    chrome.runtime.getBackgroundPage(function(bg) {
        // Relevant function at the background page. In your specific example:
        bg.clearCache();
    });
    
  5. 将以前的HTML文件添加到清单文件中的web_accessible_resources
  6. 再次打包扩展程序,例如在chrome://extensions或使用

    使用GUI
    chrome.exe --pack-extension=directorycontainingextension
    

    创建directorycontainingextension.crx后,在Chrome中加载此crx文件以了解扩展程序ID。如果您不知道如何在Chrome中加载crx文件,只需访问https://robwu.nl/crxviewer/,选择crx文件,打开F12开发人员工具并将32个字符的字符串复制到&#34;计算的扩展ID :[此处为分机号码]&#34;。

    (从ChromeDriver 2.11开始,you can just zip the extension而不是将其打包为CRX文件,并通过设置"key"属性("key"属性对清单文件中的扩展ID进行硬编码属性也由CRX Viewer打印到F12控制台上。)

  7. 修改扩展程序后,您将拥有一个与原始扩展程序具有相同功能的扩展程序,以及一个额外的HTML页面。 此新HTML页面会在打开时调用扩展程序的功能

    完成此操作后,&#34;运行&#34;扩展程序就像在新标签页中打开chrome-extension://[EXTENSION ID HERE]/example_name.html一样简单。

    如果您不喜欢这些新标签页,那么您还可以使用chrome.webRequestchrome.declarativeWebRequest API截取自定义网址,并在网页请求此资源时激活所需的功能。然后,您只需将网址放在<img>中即可激活扩展程序的功能。

答案 1 :(得分:0)

上述解决方案在技术上听起来似乎很复杂 所以我想到了另一种方法。 因为很多时候我需要手动,身份验证,某些cookie等更好的事情。

我使用文件夹作为个人资料,我运行:

chrome_options = Options()
chrome_options.add_argument("user-data-dir=selenium") 
driver = webdriver.Chrome(chrome_options=chrome_options)
driver.get("www.google.com")

然后我手动安装Extensions并执行我现在需要的登录,每次我启动Webdriver,该文件夹一切都在那里

chrome_options = Options()
chrome_options.add_argument("user-data-dir=selenium") 
driver = webdriver.Chrome(chrome_options=chrome_options)
driver.get("www.google.com") #Now you can see the Extensions and the logins done are present

优点是您可以使用具有不同设置和扩展的多个文件夹,而无需安装和卸载扩展,更改设置,更改登录等

答案 2 :(得分:0)

如果您想点击扩展程序图标,请尝试以下解决方案,希望对您有所帮助:

JavascriptExecutor js = (JavascriptExecutor) driver;
js.executeScript("window.postMessage('clicked_browser_action', '*')");