Selenium:即使在使用显式Wait之后也是NoSuchElementException

时间:2016-12-19 07:33:17

标签: python selenium

我在http://ntry.com/#/stats/ladder/round.php找到一个元素, 但在尝试了几种方法后,我一直未能找到它,包括 ind_element_by_css_selector,ind_element_by_xpath ......等等。

即使我使用了WebDriverWait,我仍然失败。会出现什么问题?

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver import ActionChains

driver = webdriver.Firefox()
driver.get("http://ntry.com/#/stats/ladder/round.php")

try:
   element = EC.presence_of_element_located((By.XPATH, '//div[@id="analysis-table"]/div[1]/div[1]/p[1]/span[1]/strong'))

   #or element = WebDriverWait(driver, 30).until(
       EC.presence_of_element_located((By.CSS_SELECTOR, "#analysis-table>div.bar_graph>div:nth-child(1)>p.left.on>span.per>strong"))
   )
except:
   print "HIJUDE"

driver.quit()

我使用了隐式等待,但这也会产生同样的错误。 不使用Wait也会产生NoSuchElementException。

selenium.common.exceptions.NoSuchElementException: Message: Unable to locate element: {"method":"xpath","selector":'//div[@id="analysis-table"]/div[1]/div[1]/p[1]/span[1]/strong'}

网站是否与无法找到元素相关?或者使用Xpath或css_selector以外的方法吗?我很困惑为什么会这样。

-------------编辑-------------- 我发现在div [@ id =“analysis-table”]的上部xpath级别有iframe。我猜这就是原因。我应该总是使用driver.switch_to_frame() 在这种情况下?顺便说一下,driver.switch_to_window()是否与frame()不同?

1 个答案:

答案 0 :(得分:0)

路径中p.left.on出现问题。一个元素具有单个类left,另一个元素具有righton个类。它应该是

"#analysis-table>div.bar_graph>div:nth-child(1)>p.left>span.per>strong"

或者

"#analysis-table>div.bar_graph>div:nth-child(1)>p.right.on>span.per>strong"