Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 现有元素可以';硒不能被发现_Python_Selenium_Xpath_Css Selectors_Webdriverwait - Fatal编程技术网

Python 现有元素可以';硒不能被发现

Python 现有元素可以';硒不能被发现,python,selenium,xpath,css-selectors,webdriverwait,Python,Selenium,Xpath,Css Selectors,Webdriverwait,我试图通过id和xpath在页面中查找元素,但每次都返回相同的错误消息。我还尝试通过使用下面的代码显示的文本来查找元素,但问题仍然存在: driver.find_elements_by_xpath("//*[contains(text(), 'Uma ou mais sondas DP')]") 我确保等到页面完全加载后再尝试查找元素 关于导致此问题的原因有何想法或建议 这是访问源代码的存储库链接: 编辑:正如我在注释部分提到的,元素位于iframe中,如图所示。但是

我试图通过id和xpath在页面中查找元素,但每次都返回相同的错误消息。我还尝试通过使用下面的代码显示的文本来查找元素,但问题仍然存在:

driver.find_elements_by_xpath("//*[contains(text(), 'Uma ou mais sondas DP')]")
我确保等到页面完全加载后再尝试查找元素

关于导致此问题的原因有何想法或建议

这是访问源代码的存储库链接:

编辑:正如我在注释部分提到的,元素位于iframe中,如图所示。但是,我在find_元素命令之前尝试使用以下代码时遇到了TimeoutException,建议如下:

iframe=WebDriverWait(driver,  10).until(EC.presence_of_element_located((By.XPATH, "//iframe")))

driver.switch_to.frame(iframe)

我尝试使用find_elements_by_tag_name方法在源代码中查找iframe元素,但它返回了一个空列表。

要查找元素,可以使用以下任一方法:

  • 使用
    css\u选择器

    element = driver.find_element(By.CSS_SELECTOR, "span.lsTextView[ct='TV'][title='Nome']")
    
  • 使用
    xpath

    element = driver.find_element(By.XPATH, "span[@ct='TV' and @title='Nome'][starts-with(., 'Uma ou mais sondas DP')]")
    

理想情况下,为了定位元素,您需要对元素的可见性进行归纳。\ u element\u located(),您可以使用以下任一方法:

  • 使用
    CSS\u选择器

    element = WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.CSS_SELECTOR, "span.lsTextView[ct='TV'][title='Nome']")))
    
  • 使用
    XPATH

    element = WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH, "span[@ct='TV' and @title='Nome'][starts-with(., 'Uma ou mais sondas DP')]")))
    
  • 注意:您必须添加以下导入:

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

工具书类 您可以在以下内容中找到有关的讨论:

必须先切换到iframe才能与其中的元素交互


然后切换回与iframe之外的元素交互

请至少共享URL和您所指的页面的完整源代码?是的,或者只是一个链接,是否更容易?是否在任何iframe中?@Timeler我会发送页面链接,但要登录网站并访问此特定页面,您必须获得付费订阅。我刚刚编辑了文章,将源代码添加到github中,并在问题的描述中添加了链接。我尝试使用您建议的方法,但不幸的是,没有成功。我很难理解到底发生了什么。我知道源代码中有iframe元素,其中一个包含我试图使用Selenium查找的元素,但由于某些原因,Selenium也找不到任何iframe元素。我更新了问题的描述以添加此信息。@LucasCruz是内部的元素,iframe和添加iframe的html。alsoI最终找到了我想要的元素,问题是它嵌套在多个框架中。谢谢你的帮助!
iframe=WebDriverWait(driver,  10).until(EC.presence_of_element_located((By.XPATH, "//iframe")))

driver.switch_to.frame(iframe)

driver.find_element_by_id("WFD6")


#REMAINING CODE TO INTERACT WITH ELEMENTS INISIDE IFRAME

#once done exit from iframe

driver.switch_to.default_content()