.net 从SeleniumWebDriver运行chrome扩展

.net 从SeleniumWebDriver运行chrome扩展,.net,selenium,google-chrome-extension,selenium-webdriver,selenium-chromedriver,.net,Selenium,Google Chrome Extension,Selenium Webdriver,Selenium Chromedriver,我知道如何在SeleniumWebDriver中加载chrome扩展。但我没有看到任何文章/博客描述如何从Selenium运行chrome扩展。 我需要从selenium显式运行chrome扩展/使其执行其功能。例如,我想用SeleniumWebDriver清除Chrome浏览器的缓存。首先我能做吗?或者Selenium WebDriver是否只会帮助我将扩展加载到浏览器实例中并将其保留在那里?当Chrome扩展被激活时,它至少已经在运行其后台/事件页面。没有API可以通过编程方式单击按钮 如果

我知道如何在SeleniumWebDriver中加载chrome扩展。但我没有看到任何文章/博客描述如何从Selenium运行chrome扩展。
我需要从selenium显式运行chrome扩展/使其执行其功能。例如,我想用SeleniumWebDriver清除Chrome浏览器的缓存。首先我能做吗?或者Selenium WebDriver是否只会帮助我将扩展加载到浏览器实例中并将其保留在那里?

当Chrome扩展被激活时,它至少已经在运行其后台/事件页面。没有API可以通过编程方式单击按钮

如果您想轻松地使用现有扩展的功能,那么我建议您下载扩展的源代码,并在扩展的源代码中插入一个额外的事件侦听器

获取扩展的源代码,例如使用aka CRX查看器。 解压缩zip文件。 创建一个新的HTML文件,例如_name.HTML,并让它包含:

<script src="example_name.js"></script>
将上一个HTML文件添加到清单文件中。 再次打包扩展,例如,在chrome://extensions 或使用

创建directorycontainingextension.crx后,在Chrome中加载此crx文件以了解扩展名ID。如果您不知道如何在Chrome中加载crx文件,只需访问,选择crx文件,打开F12开发人员工具,并在计算的扩展名ID:[此处的扩展名ID]处复制32个字符的字符串

从ChromeDriver 2.11开始,不是将其打包为CRX文件,而是通过设置密钥属性在清单文件中硬编码扩展名ID。该密钥属性也由CRX查看器打印到F12控制台

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

完成此操作后,运行扩展就像在新选项卡中打开chrome扩展://[extension ID HERE]/example_name.html一样简单


如果您不喜欢这些新选项卡,那么您还可以使用或API拦截自定义URL,并在页面请求此资源时激活所需的功能。然后,您只需将URL放在中,即可激活扩展的功能。

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

我使用文件夹作为配置文件,我运行:

chrome_options = Options()
chrome_options.add_argument("user-data-dir=selenium") 
driver = webdriver.Chrome(chrome_options=chrome_options)
driver.get("www.google.com")
然后我手动安装扩展,并在每次使用该文件夹启动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

优点是,您可以使用具有不同设置和扩展的多个文件夹,而无需安装和卸载扩展、更改设置、更改登录等。如果您想单击扩展图标,请尝试此解决方案,希望它有帮助:

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

4.创建一个新的脚本文件example_name.js,让它调用扩展的功能。我如何找出哪个方法负责任何给定插件的功能?我想使用video downloader professional plugin.FYI下载视频-这将帮助您加载扩展,但您不能使用上述代码在特定页面上单击/打开扩展。@supputuri如果扩展需要用户交互,上述代码无法处理,它只加载扩展/扩展
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
JavascriptExecutor js = (JavascriptExecutor) driver;
js.executeScript("window.postMessage('clicked_browser_action', '*')");