如何使用Selenium和Python识别元素

2024-09-30 03:23:24 发布

您现在位置:Python中文网/ 问答频道 /正文

一天来,我一直在修改Selenium(Python)的一个项目。我一直在尝试点击网页的链接,因为到目前为止,我无法通过我找到的任何方式检索元素

链接如下:

<p>
<a href="0_fr.asp?contenido=0actunor.asp" target="mainFrame"><font size="3" face="Arial" color="#CC9900">
<b>Base de datos de Disposiciones Vigentes</b></font></a>
</font>
</p>

到目前为止,我已经尝试了这些东西,所有这些都让我无动于衷:

  1. 驱动程序。通过css选择器(“a[href=0\u fr.asp?contenido=0actunor.asp]”查找元素
  2. driver.find_element_by_css_selector('div:contains(“Base de datos de Disposiciones Vigentes”))
  3. 与1)相同,但将CSS选择器作为字符串单独复制和粘贴
  4. 通过使用之间内容的链接文本和部分链接文本
  5. 通过使用id,以防万一它做了什么

在其他的StackOverflow问题和在线指南中可以找到更多关于构建我自己的css选择器之类的内容,但我不知道任何HTML或css,所以很难理解它们。 我可以提供更多的信息,如果需要的话,但我无法链接网页,因为你将不得不登录,这是一个工作的事情

欢迎任何帮助或搜索更多信息的地方

已解决:问题是链接位于一个帧内,而该帧位于另一个帧内。我只需要使用driver.switch_到.frame(“frameName”)两次,然后正常使用css_选择器,并按其应该的方式工作


Tags: 元素网页base链接方式选择器defr
2条回答

该元素是<a>元素,您将通过各种可能的方式进行交互,即单击它。理想情况下,要使用Selenium在任何元素上调用click(),必须为element_to_be_clickable()诱导WebDriverWait,并且可以使用以下Locator Strategies之一:

  • 使用CSS_SELECTOR

    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "a[href*='contenido'][href*='actunor'][target='mainFrame'] b"))).click()
    
  • 使用XPATH

    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//a[contains(@href, 'contenido') and contains(@href, 'actunor')][@target='mainFrame']//b[text()='Base de datos de Disposiciones Vigentes']"))).click()
    
  • 注意:您必须添加以下导入:

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

更新

当您观察到TimeoutException诱导WebDriverWait时,您需要在Selenium “selenium.common.exceptions.NoSuchElementException” when using Chrome中的讨论之后首先解决NoSuchElementException

请尝试以下命令

驱动程序。通过链接文本(“基本数据”查找元素)

相关问题 更多 >

    热门问题