使用Selenium Python时,带有Link_Text的find_element()不起作用



每当我尝试使用idnamexpath或任何会给出相同错误的元素时,我都是硒的新手

from selenium import webdriver
driver = webdriver.Safari()
driver.get('https://www.lambdatest.com/blog/selenium-safaridriver-macos/')
driver.find_element(By.Link_Text,'Webinar' )

它通过在by下划下划线来显示错误。我试着写

driver.find_element_by_id('Webinar')

但它没有通过。我尝试了不同的网站,使用不同的元素,如class、id,但似乎通过任何方法查找元素都有问题。是否需要安装一些东西才能使其工作?

您必须处理以下几件事:

  • 支持的定位器策略应该是LINK_TEXT,而不是Link_Text

  • link_text应为Webinars,而不是Webinar

  • 实际上,你的代码行应该是:

    driver.find_element(By.LINK_TEXT, 'Webinars' )
    

但是,在网页中有多个元素,其中innerTextWebinars。因此,您需要使用一个定位器策略来唯一地标识DOM中的元素。


解决方案

理想情况下,要从菜单容器中定位可点击的元素(文本为Webinars(,您需要诱导WebDriverWait等待元素_to_be_clickle((,您可以使用以下定位器策略之一

  • 使用CSS_SELECTOR:

    element = WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "div.menu-menu-1-container a[href='https://www.lambdatest.com/webinar/']")))
    
  • 使用XPATH:

    element = WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//div[@class='menu-menu-1-container']//a[text()='Webinars']")))
    
  • 注意:您必须添加以下导入:

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

driver.find_element(By.Link_Text,'Webinar')

应该是

driver.find_element(By.LINK_TEXT, 'Webinar')

此外,导入此from selenium.webdriver.common.by import By

如果你在Selenium4上,那么你不应该真正使用:

driver.find_element_by_id('Webinar')

改为使用这个:

driver.find_element(By.ID, 'Webinar')

如果你看一下源代码,你会发现:

class By(object):
"""
Set of supported locator strategies.
"""
ID = "id"
XPATH = "xpath"
LINK_TEXT = "link text"
PARTIAL_LINK_TEXT = "partial link text"
NAME = "name"
TAG_NAME = "tag name"
CLASS_NAME = "class name"
CSS_SELECTOR = "css selector"

相关内容

  • 没有找到相关文章

最新更新