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

Selenium:如何在加载/执行页面的任何其他脚本之前将Javascript注入/执行到页面?

商同
2023-03-14

我在谷歌上搜索了几个小时,但我找不到任何正确的答案!

共有1个答案

锺离良哲
2023-03-14

如果无法修改页面内容,可以使用代理,或在浏览器中安装的扩展中使用内容脚本。在selenium中执行此操作时,您将编写一些代码,将脚本作为现有元素的子元素之一注入,但在加载页面之前(当驱动程序的get()调用返回时),您将无法运行该脚本

String name = (String) ((JavascriptExecutor) driver).executeScript(
    "(function () { ... })();" ...

文档没有指定代码开始执行的时间。您可能希望在DOM开始加载之前就这样做,这样保证只能通过代理或扩展内容脚本路由来满足。

如果您可以用最小的工具来检测页面,那么您可以检测到特殊url查询参数的存在并加载附加内容,但您需要使用内联脚本来这样做。伪代码:

 <html>
    <head>
       <script type="text/javascript">
       (function () {
       if (location && location.href && location.href.indexOf("SELENIUM_TEST") >= 0) {
          var injectScript = document.createElement("script");
          injectScript.setAttribute("type", "text/javascript");

          //another option is to perform a synchronous XHR and inject via innerText.
          injectScript.setAttribute("src", URL_OF_EXTRA_SCRIPT);
          document.documentElement.appendChild(injectScript);

          //optional. cleaner to remove. it has already been loaded at this point.
          document.documentElement.removeChild(injectScript);
       }
       })();
       </script>
    ...
 类似资料:
  • 问题内容: 我正在使用Selenium python Webdriver来浏览某些页面。我想在加载和执行任何其他Javascript代码之前向页面中注入JavaScript代码。另一方面,我需要将我的JS代码作为该页面的第一个JS代码执行。Selenium有办法做到吗? 我用谷歌搜索了几个小时,但找不到合适的答案! 问题答案: 如果您无法修改页面内容,则可以使用代理或在浏览器中安装的扩展程序中使用

  • 问题内容: 我正在使用inside 执行外部脚本。 现在,由于脚本是 在 页面加载 之前 执行的,因此我无法访问。在文档“加载”后(HTML已完全下载并在RAM中),我想执行一些JavaScript。执行脚本时,是否有任何我可以挂上的事件,这些事件将在页面加载时触发? 问题答案: 这些解决方案将起作用: 要么 甚至 请注意, 最后一个选项是更好的选择,因为它不引人注目并且被[认为是更标准的。

  • 问题内容: 我正在尝试将MutationObserver设置为在加载时观察页面突变。 为此,应在页面加载之前配置MutationObserver。 使用selenium-chromedriver,找不到为此目的注入JS的方法。 我知道chrome扩展程序可以做到这一点,但扩展程序无法在无头模式下工作。 那就是问题所在。 问题答案: 通过调用DevTool API可以实现

  • 问题内容: 我正在尝试使用AJAX创建一个页面,但是当我获得该页面并且它包含Javascript代码时,它不会执行。 为什么? 我的ajax页面中的简单代码: …并且它不执行它。我正在尝试使用Google Maps API并通过AJAX添加标记,因此,每添加一个标记,我都会执行一个AJAX页面,该页面将获取新标记,并将其存储在数据库中,并应将标记“动态”添加到地图中。 但是,由于我无法以这种方式执

  • 如何在SeleniumWebDriver中执行任何活动之前等待ajax加载?我有一个表单,我通过脚本填充表单字段,然后单击一个按钮,然后打开下一个表单,并从上一个表单中预填充几个字段,我想等待该表单,以便表单得到填充,然后我的下一个脚本运行ie,直到我的ajax加载。我正在使用java。 我认为等待直到使用,但我不知道如何使用这个。或者如果有其他解决方案,请建议...

  • 问题内容: 我目前正在使用Express.js创建我的网站。我的主服务器脚本称为。我还创建了一个脚本,该脚本发出GET请求并显示响应 从控制台运行脚本时,我没有任何问题: 我的问题是:如何使页面上的“获取此列表”按钮通过在同一页面上显示列表(即在服务器上执行并显示结果)来响应单击? app.js 索引咖啡 p->“嘿” 问题答案: 我使用普通的JS而非咖啡脚本,因此这是每个Fosco注释(称为)的