使用 Chrome 时,Selenium 出现“selenium.common.exceptions.NoSuchElementException”
- 2024-11-18 08:41:00
- admin 原创
- 15
问题描述:
我正在尝试使用 Chrome 上的 Selenium 播放QWOP,但一直收到以下错误:
selenium.common.exceptions.NoSuchElementException:
Message: no such element: Unable to locate element
{"method":"id","selector":"window1"
(Session info: chrome=63.0.3239.108
(Driver info: chromedriver=2.34.522913
(36222509aa6e819815938cbf2709b4849735537c), platform=Linux 4.10.0-42-generic x86_64)
使用以下代码:
from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
import time
browser = webdriver.Chrome()
browser.set_window_size(640, 480)
browser.get('http://www.foddy.net/Athletics.html?webgl=true')
browser.implicitly_wait(10)
canvas = browser.find_element_by_id("window1")
canvas.click()
while (True):
action = ActionChains(browser)
action.move_to_element(canvas).perform()
canvas.click()
canvas.send_keys("q")
相同的代码在 Firefox 上可以完美运行,但因为我想使用 chrome 的功能在无头模式下运行 webgl 游戏,所以我无法真正切换到 Firefox。
有什么解决方法可以使它正常工作吗?
解决方案 1:
不存在此类元素异常
selenium.common.exceptions.NoSuchElementException俗称NoSuchElementException
定义如下:
exception selenium.common.exceptions.NoSuchElementException(msg=None, screen=None, stacktrace=None)
NoSuchElementException
基本上分为以下两种情况:
使用时:
webdriver.find_element_by_*("expression")
//example : my_element = driver.find_element_by_xpath("xpath_expression")
使用时:
element.find_element_by_*("expression")
//example : my_element = element.find_element_by_*("expression")
与其他任何文档一样selenium.common.exceptions
, API 文档NoSuchElementException
应包含以下参数:
消息、屏幕、堆栈跟踪
raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"xpath","selector":".//*[@id='create-portal-popup']/div[4]/div[1]/button[3]"}
(Session info: chrome=61.0.3163.100)
(Driver info: chromedriver=2.32.498550 (9dec58e66c31bcc53a9ce3c7226f0c1c5810906a),platform=Windows NT 10.0.10240 x86_64)
原因
NoSuchElementException的原因可能是以下之一:
您采用的定位器策略并未识别HTML DOM中的任何元素。
您采用的定位器策略无法识别该元素,因为它不在浏览器的视口内。
您采用的定位器策略可以识别元素,但由于存在属性style="display: none;"而看不见。
您采用的定位器策略不能唯一地标识HTML DOM中所需的元素,并且当前找到了其他隐藏/不可见元素。
您尝试定位的 WebElement 位于标签内
<iframe>
。甚至在元素在HTML DOM中出现/可见之前, WebDriver实例就开始寻找WebElement 了。
解决方案
解决NoSuchElementException的解决方案可以是以下任一种:
采用唯一标识所需WebElement 的定位器策略。您可以借助开发人员工具(++或)并使用元素检查器。
Ctrl
`ShiftI
F12`
在这里您将找到有关如何在 selenium3.6 中检查元素的详细讨论,因为 firebug 不再是 FF 56 的选项?
使用
execute_script()
方法将元素滚动到视图中,如下所示:
elem = driver.find_element_by_xpath("element_xpath")
driver.execute_script("arguments[0].scrollIntoView();", elem)
在这里,您可以找到有关使用 Selenium 在 Python 中滚动到页面顶部的详细讨论
如果元素具有属性style="display: none;"
executeScript()
,则通过以下方法删除该属性:
elem = driver.find_element_by_xpath("element_xpath")
driver.execute_script("arguments[0].removeAttribute('style')", elem)
elem.send_keys("text_to_send")
要检查元素是否在HTML中,请通过以下任一方法
<iframe>
向上遍历以找到相应的标签和所需的iframe :<iframe>
`switchTo()`
driver.switch_to.frame("iframe_name")
driver.switch_to.frame("iframe_id")
driver.switch_to.frame(1) // 1 represents frame index
在这里您可以找到关于如何选择一个 html 元素,无论它位于 selenium 中的哪个框架中?的详细讨论。
如果元素在HTML DOM中不存在或不可见,则使用expected_conditions设置为适当的方法引发WebDriverWait,如下所示:
+ 等待**presence_of_element_located**:
element = WebDriverWait(driver, 20).until(expected_conditions.presence_of_element_located((By.XPATH, "element_xpath']")))
+ 等待**visibility_of_element_located**:
element = WebDriverWait(driver, 20).until(expected_conditions.visibility_of_element_located((By.CSS_SELECTOR, "element_css")
+ 等待**element_to_be_clickable**:
element = WebDriverWait(driver, 20).until(expected_conditions.element_to_be_clickable((By.LINK_TEXT, "element_link_text")))
此用例
您看到这种NoSuchElementException
情况是因为id定位器无法唯一地标识画布。要识别画布并click()
在其上显示,您必须等待画布,为此clickable
,您可以使用以下代码块:
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//canvas[@id='window1']"))).click()
参考
您可以找到Selenium的Java 语言以客户为基础的相关讨论:
NoSuchElementException,Selenium 无法定位元素
- 2024年20款好用的项目管理软件推荐,项目管理提效的20个工具和技巧
- 2024年开源项目管理软件有哪些?推荐5款好用的项目管理工具
- 项目管理软件有哪些?推荐7款超好用的项目管理工具
- 项目管理软件哪个最好用?盘点推荐5款好用的项目管理工具
- 项目管理软件有哪些最好用?推荐6款好用的项目管理工具
- 项目管理软件有哪些,盘点推荐国内外超好用的7款项目管理工具
- 2024项目管理软件排行榜(10类常用的项目管理工具全推荐)
- 项目管理软件排行榜:2024年项目经理必备5款开源项目管理软件汇总
- 2024年常用的项目管理软件有哪些?推荐这10款国内外好用的项目管理工具
- 项目管理必备:盘点2024年13款好用的项目管理软件