每当我尝试使用id
、name
、xpath
或任何会给出相同错误的元素时,我都是硒的新手
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' )
但是,在网页中有多个元素,其中innerText
为Webinars
。因此,您需要使用一个定位器策略来唯一地标识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"