当前位置: 首页 > 知识库问答 >
问题:

从Selenium WebDriver运行chrome扩展

公良俊楚
2023-03-14

我知道如何在selenium webdriver中加载chrome扩展。但是我没有看到任何描述如何从Selenium运行chrome扩展的帖子/博客。< br>
我需要明确地让chrome扩展运行/让它从selenium执行它的功能。比如我想用Selenium Webdriver的这个扩展清除Chrome浏览器的缓存。< br>
我可以先做吗?或者Selenium WebDriver是否只帮助我将一个扩展加载到浏览器实例中,并将它留在那里?

共有3个答案

许照
2023-03-14

上面的解决方案在技术上是合理的,看起来很复杂,所以我想了另一种方法来做。因为很多时候我需要很多更好的手动完成的事情,身份验证,某些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

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

黄永怡
2023-03-14

如果您想单击扩展图标,请尝试此解决方案,希望对您有所帮助:

JavascriptExecutor js = (JavascriptExecutor) driver;
js.executeScript("window.postMessage('clicked_browser_action', '*')");
高展
2023-03-14

当一个Chrome扩展被激活时,它已经在“运行”(至少是它的背景/事件页面)。没有API可以通过编程点击按钮。

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

>

  • 获取扩展的源代码(例如使用Chrome扩展源查看器,又名CRX查看器)。
  • 解压缩zip文件。
  • 创建一个新的超文本标记语言文件,example_name.html,并让它包含:

    <script src="example_name.js"></script>
    

    创建一个新的html" target="_blank">脚本文件,example_name.js,并让它调用扩展的功能,例如:

    chrome.runtime.getBackgroundPage(function(bg) {
        // Relevant function at the background page. In your specific example:
        bg.clearCache();
    });
    

    再次打包扩展,例如使用Chrome://扩展上的GUI或使用

    chrome.exe --pack-extension=directorycontainingextension
    

    创建< code > directory containingextension . crx 后,在Chrome中加载这个crx文件以了解扩展ID。如果你不知道如何在Chrome中加载crx文件,只需访问https://robwu.nl/crxviewer/,选择crx文件,打开F12开发工具,在“计算的扩展名ID:[此处为扩展名ID]”处复制32个字符的字符串。

    (从ChromeDriver 2.11开始,您只需压缩扩展程序而不是将其打包为CRX文件,并通过设置“key”属性在清单文件中对扩展程序ID进行硬编码(此“key”属性也由CRX查看器打印到F12控制台)。

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

    这样做之后,“运行”扩展就像打开chrome扩展一样简单://[extension ID HERE]/example_name。html</code>在一个新的选项卡中。

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

  •  类似资料:
    • 问题内容: 我知道如何在Selenium Webdriver中加载Chrome扩展程序。但是我没有看到任何描述如何从Selenium 运行 chrome扩展的帖子/博客。 我需要明确地使chrome扩展程序运行/使其从selenium中执行其功能。例如,我想使用带有Selenium Webdriver的扩展程序清除Chrome浏览器的缓存。 我可以先做吗?还是Selenium WebDriver仅

    • 我正在开发一个chrome扩展,遇到了一个大问题。 奇怪的是,我可以访问iframe的html。因此,这段代码在chrome扩展中可以完美地工作: 我尝试将“all_frames”:true放入清单文件中,但没有成功:(

    • Tweetmeme Chrome 扩展其实就是一个精简版的 TweetMeme 按钮,其作用就是让你“随时随地”都可以向你的关注者分享你正在浏览的网页(“随时随地”加引号是因为在天朝该服务不可用),简单点说就是一个 retweet 按钮。通过 Tweetmeme Chrome 扩展分享出的网址会采用 retwt.me 短网址服务进行缩短,对于身在墙外或者随时都在翻墙状态的用户来说非常实用。 安装

    • 问题内容: 因此,对我的问题进行基本描述。 我有一个现在可以正常使用的扩展程序(最终),可以将电话号码包装在一种标签中。 它现在正在运行,但是我遇到了基于用户动作或基于ajax请求通过JS动态加载的任何内容的问题 例如,如果我单击并发送一个Hotmail电子邮件,该脚本将起作用,但仅当我刷新页面时,该电子邮件才能加载并调用我的内容脚本。 我考虑过通过使用户单击扩展程序的图标来解决此问题,但这并不是

    • 问题内容: 我有一个chrome扩展程序,可以在网站上进行一些更改(编辑评论)。 在站点上进行了最近更改之后(站点不是我的站点)-使用ajax加载了注释块(之前是简单的发布请求,整个页面都重新加载了)。 现在,如果我第一次加载页面-内容脚本可以工作,但是当我转到下一页时,说页面#2-使用ajax添加注释,并且不再运行扩展脚本。所以评论并没有改变我想要的方式。 有没有简单的方法来监听页面更改DOM并

    • Puppeteer 可以用来测试 Chrome 扩展 注意 Chrome / Chromium 扩展当前只能在非无头模式下使用。 下面的代码用来处理扩展的 background page,该扩展的代码在 ./my-extension: const puppeteer = require('puppeteer'); (async () => { const pathToExtension =