gpt4 book ai didi

javascript - Selenium 网络驱动程序 : execute_script can't execute custom methods and external javascript files

转载 作者:数据小太阳 更新时间:2023-10-29 05:54:57 25 4
gpt4 key购买 nike

我正在使用 Selenium 和 Python,我正在尝试做两件事:

  • 导入外部 javascript 文件并执行其中定义的方法
  • 在字符串上定义方法并在求值后调用它们

这是第一种情况的输出:

测试.js

function hello(){
document.body.innerHTML = "testing";
}

Python代码

>>> from selenium import webdriver
>>> f = webdriver.Firefox()
>>> f.execute_script("var s=document.createElement('script');\
... s.src='file://C:/test.js';\
... s.type = 'text/javascript';\
... document.head.appendChild(s)")
>>> f.execute_script("hello")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:\Python27\lib\site-packages\selenium-2.41.0-py2.7.egg\selenium\webdriver\remote\webdriver.py", line 394, in execute_script
{'script': script, 'args':converted_args})['value']
File "C:\Python27\lib\site-packages\selenium-2.41.0-py2.7.egg\selenium\webdriver\remote\webdriver.py", line 166, in execute
self.error_handler.check_response(response)
File "C:\Python27\lib\site-packages\selenium-2.41.0-py2.7.egg\selenium\webdriver\remote\errorhandler.py", line 164, in check_response
raise exception_class(message, screen, stacktrace) selenium.common.exceptions.WebDriverException: Message: u'hello is not defined' ; Stacktrace:
at anonymous (about:blank:68)
at handleEvaluateEvent (about:blank:68)

对于第二种情况:

>>> js = "function blah(){document.body.innerHTML='testing';}"
>>> f.execute_script(js)
>>> f.execute_script("blah")
...
raise exception_class(message, screen, stacktrace) selenium.common.exceptions.WebDriverException: Message: u'blah is not defined' ; Stacktrace:

最佳答案

如果我创建一个空的 html 文件并发布:

f = webdriver.Firefox()
f.get("file://path/to/empty.html")

在此之后,您显示的 JavaScript 将毫无问题地执行。当我尝试您在问题中显示的代码时,Firefox 没有给我错误,但 Chrome 说:“不允许加载本地资源”。我认为问题出在跨域请求上。

第二个案例的问题在于,Selenium 在幕后将您的 JavaScript 代码包装在一个匿名函数中。所以你的 blah 函数是这个匿名函数的本地函数。如果你想让它成为全局的,你必须将它分配给 window,像这样:

>>> from selenium import webdriver
>>> f = webdriver.Firefox()
>>> f.execute_script("window.blah = function () {document.body.innerHTML='testing';}")
>>> f.execute_script("blah()")

关于javascript - Selenium 网络驱动程序 : execute_script can't execute custom methods and external javascript files,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23228247/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com