Python 现有元素可以';硒不能被发现
我试图通过id和xpath在页面中查找元素,但每次都返回相同的错误消息。我还尝试通过使用下面的代码显示的文本来查找元素,但问题仍然存在: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中,如图所示。但是
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之外的元素交互请至少共享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()