val*_*rse 7 python selenium google-chrome chromium selenium-chromedriver
我正在尝试在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)
Run Code Online (Sandbox Code Playgroud)
使用以下代码时:
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")
Run Code Online (Sandbox Code Playgroud)
相同的代码在Firefox上完美运行,但由于我想使用chrome的功能在无头模式下运行webgl游戏,我无法真正切换到Firefox.
有什么办法让这个工作吗?
NoSuchElementExceptionselenium.common.exceptions.NoSuchElementException俗称的NoSuchElementException定义为:
exception selenium.common.exceptions.NoSuchElementException(msg=None, screen=None, stacktrace=None)
Run Code Online (Sandbox Code Playgroud)
NoSuchElementException 基本上抛出2种情况如下:
使用时:
webdriver.find_element_by_*("expression")
//example : my_element = driver.find_element_by_xpath("xpath_expression")
Run Code Online (Sandbox Code Playgroud)使用时:
element.find_element_by_*("expression")
//example : my_element = element.find_element_by_*("expression")
Run Code Online (Sandbox Code Playgroud)根据API Docs,与其他任何文档一样selenium.common.exceptions,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)
Run Code Online (Sandbox Code Playgroud)NoSuchElementException的原因可能是以下任一情况:
<iframe>标记内.解决NoSuchElementException的解决方案可以是以下任一种:
采用定位策略,唯一标识所需的WebElement.您可以获取开发人员工具(Ctrl+ Shift+ I或F12)的帮助并使用Element Inspector.
在这里你会找到关于如何检查selenium3.6中的元素的详细讨论,因为对于FF 56来说,firebug不再是一个选项?
使用execute_script()方法滚动元素以进行查看,如下所示:
elem = driver.find_element_by_xpath("element_xpath")
driver.execute_script("arguments[0].scrollIntoView();", elem)
Run Code Online (Sandbox Code Playgroud)
在这里,您将找到有关使用Selenium在Python中滚动到页面顶部的详细讨论
Incase元素具有属性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")
Run Code Online (Sandbox Code Playgroud)要检查元素是否在<iframe>遍历HTML中,以通过以下任一方法找到相应的<iframe>标记和switchTo()所需的iframe:
driver.switch_to.frame("iframe_name")
driver.switch_to.frame("iframe_id")
driver.switch_to.frame(1) // 1 represents frame index
Run Code Online (Sandbox Code Playgroud)
在这里你可以找到关于如何选择html元素的详细讨论,无论它在selenium中的框架是什么?.
如果该元素是不存在/可见在HTML DOM立即,诱导WebDriverWait与expected_conditions设定为适当的方法如下:
要等待presence_of_element_located:
element = WebDriverWait(driver, 20).until(expected_conditions.presence_of_element_located((By.XPATH, "element_xpath']")))
Run Code Online (Sandbox Code Playgroud)要等待visibility_of_element_located:
element = WebDriverWait(driver, 20).until(expected_conditions.visibility_of_element_located((By.CSS_SELECTOR, "element_css")
Run Code Online (Sandbox Code Playgroud)element = WebDriverWait(driver, 20).until(expected_conditions.element_to_be_clickable((By.LINK_TEXT, "element_link_text")))
Run Code Online (Sandbox Code Playgroud)您看到了NoSuchElementException因为id定位器没有唯一标识画布.为了确定画布上,并click()在其上,你必须等待画布是clickable和实现,你可以使用下面的代码块:
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//canvas[@id='window1']"))).click()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3015 次 |
| 最近记录: |