为了账号安全,请及时绑定邮箱和手机立即绑定

如何使用Selenium的JavascriptExecutor将<script>添加到Head中

如何使用Selenium的JavascriptExecutor将<script>添加到Head中

慕码人2483693 2022-08-03 16:03:00
总结我想找出一种方法,使用 's 将标签添加到 DOM 的头部,或者任何其他方法都可以。<script>SeleniumJavascriptExecutor我尝试了很多方法,也发现了一些类似的主题,但没有一个解决了我的问题,这就是为什么我觉得有必要在这里问它。例如:这个问题中建议的解决方案并没有解决我的问题。有些人说这对他们有用,但不,它不适合我。我一直在尝试执行什么?以下是我要执行的代码的小片段:            WebDriver driver = new FirefoxDriver();            JavascriptExecutor jse = (JavascriptExecutor) driver;            jse.executeScript("var s = document.createElement('script');");            jse.executeScript("s.type = 'text/javascript';");            jse.executeScript("s.text = 'function foo() {console.log('foo')}';");            jse.executeScript("window.document.head.appendChild(s);");我只是跳过了上面的代码,您可以使用等导航到网页,然后尝试执行脚本。driver.get()另外,将包含我想使用的实际脚本,所以我只是放了一个函数来给出这个想法。s.textfoo()上面的代码会在您运行它时引发此错误:Exception in thread "main" org.openqa.selenium.JavascriptException: ReferenceError: s is not defined到目前为止,我已经尝试了在互联网上找到的所有可能的解决方案,但似乎没有一个有效。
查看完整描述

2 回答

?
达令说

TA贡献1821条经验 获得超6个赞

OP提出了以下解决方案:


jse.executeScript("var s=window.document.createElement('script');" + 

"s.type = 'text/javascript';" + "s.text = function foo() {console.log('foo')};" + 

"window.document.head.appendChild(s);");


查看完整回答
反对 回复 2022-08-03
?
慕森卡

TA贡献1806条经验 获得超8个赞

首先,此行无效。

    jse.executeScript("s.text = 'function foo() {console.log('foo')}';");

请注意如何将单引号文本括在单引号中。将一个集合用作“\””

我个人会通过做(编辑使其成为全局函数)来做到这一点:

using OpenQA.Selenium.Support.Extensions;

driver.ExecuteJavascript("window.foo = function foo() {console.log('foo')}");

就这么简单。您正在通过执行此操作将 foo 注册为方法。执行此javascript后,您可以手动进入浏览器开发人员工具并调用“foo()”进行检查。此外,您可以通过直接在控制台中注册来检查这一点。只需在浏览器控制台中输入“function foo() {console.log('foo')}”,然后调用“foo()”。

无需将其添加为脚本标记。

编辑#2:我修复了上面的代码建议,以便将方法分配给窗口,从而可以全局访问,并且在javascript执行器运行代码的匿名脚本之外。这不起作用的原始问题已通过此解决,至少在我对它的测试中。


查看完整回答
反对 回复 2022-08-03
  • 2 回答
  • 0 关注
  • 167 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号