javascript - selenium.common.exceptions.WebDriverException:消息:未知错误:“脚本”必须是字符串,同时通过 Selenium Python 使用 execute_script()
问题描述
我在使用 selenium 和 python 时遇到了 browser.execute_script 的问题。有一个我想点击的元素(下面是 xpath)
"//*[@id='listFav_FI410_23244709400000_FAGNNURROR_IPOF_APP_P43070_W43070A_CP000A001_40']/table/tbody/tr/td[1]"
我尝试这样做:
navMenu = browser.find_element_by_xpath("//*[@id='listFav_FI410_23244709400000_FAGNNURROR_IPOF_APP_P43070_W43070A_CP000A001_40']/table/tbody/tr/td[1]")
time.sleep(3)
browser.execute_script(navMenu.click())
它可以工作(因此它会单击所需的元素),但在执行此操作后会立即引发终止脚本的错误:
selenium.common.exceptions.WebDriverException: Message: unknown error: 'script' must be a string
我究竟做错了什么?有没有办法跳过这个错误?谢谢你浪费你的时间来帮助我:)
解决方案
此错误消息...
selenium.common.exceptions.WebDriverException: Message: unknown error: 'script' must be a string
...意味着使用错误类型的参数execute_script()
调用该方法。
该execute_script()
方法定义为:
execute_script(script, *args)
Synchronously Executes JavaScript in the current window/frame.
Where:
script: The JavaScript to execute
*args: Any applicable arguments for your JavaScript.
在您的代码中,试用executeScript()
方法将元素的引用作为arguments[0]以及要执行的方法(在这种情况下click()
),并且此后应提供引用。所以@Andersson 的解决方案应该有效。
navMenu = browser.find_element_by_xpath("//*[@id='listFav_FI410_23244709400000_FAGNNURROR_IPOF_APP_P43070_W43070A_CP000A001_40']/table/tbody/tr/td[1]")
browser.execute_script("arguments[0].click()", navMenu)
您可以在 Selenium WebDriver 的 javascriptexecutor 中的参数 [0] 和参数 [1] 是什么意思中找到详细讨论?
对您的主要问题的提示是错误element not visible
,这意味着以下两种情况之一:
click()
您甚至在元素可见/可点击之前尝试调用- 调用时元素不在视口内。
click()
解决方案
两种可能的解决方案如下:
诱导WebDriverWait使元素可点击,如下所示:
from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.common.by import By from selenium.webdriver.support import expected_conditions as EC # other lines of code WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//*[@id='listFav_FI410_23244709400000_FAGNNURROR_IPOF_APP_P43070_W43070A_CP000A001_40']/table/tbody/tr/td[1]"))).click()
使用
executeScript()
方法将元素带入视口,然后调用click()
如下:navMenu = browser.find_element_by_xpath("//*[@id='listFav_FI410_23244709400000_FAGNNURROR_IPOF_APP_P43070_W43070A_CP000A001_40']/table/tbody/tr/td[1]") browser.execute_script("arguments[0].scrollIntoView(true);",navMenu); navMenu.click()
推荐阅读
- angular - Angular从客户端避免CORS问题
- sql - 通过 DENSE_RANK() 在 partition by 和 order by 中使用相同的列
- jenkins - Jenkins 不调用 psexec 命令,因为“访问被拒绝”
- boost - Boost进程连续读取输出
- corda - 如何在 Corda 中添加自定义类型的货币及其价值?
- angular - 拒绝设置不安全的标头“Access-Control-Request-Headers”Angular 4
- php - zend - 参数太少而无法运行
- e-commerce - BigCommerce Customize checkout page
- javascript - 使用 text 方法获取元素的文本,然后检查条件但没有得到适当的输出
- c# - 为什么 RU 的数量会改变我的 CosmosDB 结果集大小?