繁体   English   中英

使用Selenium在Python中执行JavaScript

[英]Executing JavaScript in Python With 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]))

这会将您的单个代码段使用组合为一个; 并让硒驱动程序执行它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM