通过 href 属性的一部分查找元素
Find an element by part of the href attribute
我正在尝试自动打开页面上的任何联系人菜单:
例如,我要转到“http://www.bawnlodge.co.uk/”页面 - 然后我想单击 "Contact" 选项卡
ATM 我尝试了各种方法,例如:
driver.find_element_by_xpath("//*[contains(text(), 'onta')]").click()
或
driver.find_element_by_xpath('//a[contains(@href, "onta")]').click()
(和少数类似的)
但是到目前为止,我无法单击该元素
如果有人能解释我为什么在这里失败,我将不胜感激:/
尝试 WebDriverWait 和以下定位器策略。
element=WebDriverWait(driver,30).until(EC.element_to_be_clickable((By.XPATH,'//div[@class="right"]//ul[@id="menu-header-right"]//li/a[contains(.,"Contact")]')))
element.click()
您需要有以下导入才能在上面的代码中工作。
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
您可以使用更快的 class 或 id css 选择器
WebDriverWait(driver, 5).until(EC.element_to_be_clickable((By.CSS_SELECTOR, '.menu-item-26 a'))).click()
或
WebDriverWait(driver, 5).until(EC.element_to_be_clickable((By.CSS_SELECTOR, '#menu-item-100 a'))).click()
您也可以简单地将字符串 "contact" 连接到“http://www.bawnlodge.co.uk/”上,然后 .get 到那个。多词选项卡名称由“-”连接,例如lodge-bar-and-kitchen
。一切都是小写的。
要使用 href
属性的一部分在文本为 CONTACT 的元素上调用 click()
,您需要引入 WebDriverWait 以获得所需的 element_to_be_clickable()
,您可以使用以下任一项 :
使用CSS_SELECTOR
:
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "div.container a[href*='contact']"))).click()
使用XPATH
:
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//div[@class='container']//a[contains(@href, 'contact')]"))).click()
注意:您必须添加以下导入:
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
我正在尝试自动打开页面上的任何联系人菜单: 例如,我要转到“http://www.bawnlodge.co.uk/”页面 - 然后我想单击 "Contact" 选项卡
ATM 我尝试了各种方法,例如:
driver.find_element_by_xpath("//*[contains(text(), 'onta')]").click()
或
driver.find_element_by_xpath('//a[contains(@href, "onta")]').click()
(和少数类似的)
但是到目前为止,我无法单击该元素
如果有人能解释我为什么在这里失败,我将不胜感激:/
尝试 WebDriverWait 和以下定位器策略。
element=WebDriverWait(driver,30).until(EC.element_to_be_clickable((By.XPATH,'//div[@class="right"]//ul[@id="menu-header-right"]//li/a[contains(.,"Contact")]')))
element.click()
您需要有以下导入才能在上面的代码中工作。
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
您可以使用更快的 class 或 id css 选择器
WebDriverWait(driver, 5).until(EC.element_to_be_clickable((By.CSS_SELECTOR, '.menu-item-26 a'))).click()
或
WebDriverWait(driver, 5).until(EC.element_to_be_clickable((By.CSS_SELECTOR, '#menu-item-100 a'))).click()
您也可以简单地将字符串 "contact" 连接到“http://www.bawnlodge.co.uk/”上,然后 .get 到那个。多词选项卡名称由“-”连接,例如lodge-bar-and-kitchen
。一切都是小写的。
要使用 href
属性的一部分在文本为 CONTACT 的元素上调用 click()
,您需要引入 WebDriverWait 以获得所需的 element_to_be_clickable()
,您可以使用以下任一项
使用
CSS_SELECTOR
:WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "div.container a[href*='contact']"))).click()
使用
XPATH
:WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//div[@class='container']//a[contains(@href, 'contact')]"))).click()
注意:您必须添加以下导入:
from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.common.by import By from selenium.webdriver.support import expected_conditions as EC