javascript - 使用 Selenium 在 Python 中执行 JavaScript

标签 javascript python selenium

我目前正在尝试删除我正在自动化的网页上的元素属性。 总会有两个具有该名称的变量,而第二个变量始终是需要修改的变量。

这一切都需要立即执行才能工作吗?或者我是否需要添加该元素作为参数?我不确定如何调试它,因为我对 JavaScript 不太熟悉。

以下是我当前的代码:

js_one = "var x = document.getElementsByName(\"element\")"
js_two = "x[1].removeAttribute(\"readonly\")"
js_three = "x[1].removeAttribute(\"disabled\")"

driver.execute_script(js_one)
driver.execute_script(js_two)
driver.execute_script(js_three)

它给了我以下错误:

  File "main.py", line 393, in main
    driver.execute_script(js_two)
  File "C:\Users\~\AppData\Local\Continuum\anaconda3\lib\site-packages\sele
nium\webdriver\remote\webdriver.py", line 629, in execute_script
    'args': converted_args})['value']
  File "C:\Users\~\AppData\Local\Continuum\anaconda3\lib\site-packages\sele
nium\webdriver\remote\webdriver.py", line 314, in execute
    self.error_handler.check_response(response)
  File "C:\Users\~\AppData\Local\Continuum\anaconda3\lib\site-packages\sele
nium\webdriver\remote\errorhandler.py", line 242, in check_response
    raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.JavascriptException: Message: ReferenceError: x is no
t defined

编辑 我通过将代码更改为以下内容解决了该问题:

js_one = 'document.getElementsByName("element")[1].removeAttribute("readonly");' 
js_two = 'document.getElementsByName("element")[1].removeAttribute("disabled");'
driver.execute_script(js_one + js_two)      

如果有人有更有效的方法来执行此操作,请随时告诉我!

最佳答案

您正在一个接一个地执行三个 JavaScript 代码段,并且在第二个代码段中您希望定义变量 x,但事实并非如此,因此您会得到 ReferenceError:

selenium.common.exceptions.JavascriptException: Message: ReferenceError: x is not defined

我建议尝试这样:

driver.execute_script(";".join([js_one, js_two, js_three]))

这将使用 ; 将您的各个片段连接到一个片段,并让 selenium 驱动程序执行它。

关于javascript - 使用 Selenium 在 Python 中执行 JavaScript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50704849/

相关文章:

javascript - 在 Android 网页中禁用缩放输入焦点

javascript - 使用 Google 闭包模板时如何迭代 Soy 文件中的对象?

javascript - 片段 uri 未在浏览器上执行

python - 使用seaborn绘制水平条形图

css - 获取 last-of-type 的实际第 nth-of-type 位置

javascript - 需要为我的导航创建一个移动版本不成功

python - 如何在Python中的数据框中将日期时间舍入为十分钟日期时间

Python 循环导入, `from lib import module` 与 `import lib.module`

azure - 如何在“测试”选项卡下的 Azure DevOps 发布管道中查看 Selenium Side runner 命令行 (selenium-side-runner) 测试套件结果

java.lang.NullPointerException 错误 - Intellij IDEA、Selenium、Java