我知道如何在selenium webdriver中加载chrome扩展。但我没有看到任何帖子/博客描述我如何运行来自Selenium的Chrome扩展程序。
我需要明确地运行chrome扩展/使其从selenium执行它的功能。例如,我想使用带有Selenium Webdriver的extension来清除Chrome浏览器的缓存。
我可以在第一时间做到吗?或者Selenium WebDriver是否只帮助我将扩展程序加载到浏览器实例中并将其保留在那里?
答案 0 :(得分:7)
激活Chrome扩展程序后,它已经“正在运行”#34; (至少是它的背景/事件页面)。没有API以编程方式单击按钮。
如果您想轻松使用现有扩展程序的功能,我建议您下载扩展程序的源代码,并在扩展程序的源代码中插入其他事件监听程序。
创建一个新的HTML文件example_name.html
,并将其包含在内:
<script src="example_name.js"></script>
创建一个新的脚本文件example_name.js
,并让它调用扩展程序的功能,例如:
chrome.runtime.getBackgroundPage(function(bg) {
// Relevant function at the background page. In your specific example:
bg.clearCache();
});
web_accessible_resources
。再次打包扩展程序,例如在chrome://extensions
或使用
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控制台上。)
修改扩展程序后,您将拥有一个与原始扩展程序具有相同功能的扩展程序,以及一个额外的HTML页面。 此新HTML页面会在打开时调用扩展程序的功能。
完成此操作后,&#34;运行&#34;扩展程序就像在新标签页中打开chrome-extension://[EXTENSION ID HERE]/example_name.html
一样简单。
如果您不喜欢这些新标签页,那么您还可以使用chrome.webRequest
或chrome.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', '*')");