我正在学习硒,并且正在尝试一件简单的事情:单击Wikipedia的搜索结果。
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
PATH = "chromedriver.exe"
driver = webdriver.Chrome(PATH)
driver.get("https://en.wikipedia.org")
# Input in the search bar
search = driver.find_element_by_id("searchInput")
search.send_keys("python", Keys.RETURN)
wait = WebDriverWait(driver, 10)
first_result = wait.until(
EC.presence_of_element_located((By.CLASS_NAME, "mw-search-result-heading"))
)
first_result.click()
因此,我可以选择第一个结果的标题。但是我不能点击它。
我认为这是因为我单击的是包含链接的<div>
,而不是实际的链接。这是HTML的代码段:
在没有任何类名,ID或名称的情况下,如何定位实际的<a>
链接?
答案 0 :(得分:1)
由于您正在使用Selenium,因此可能要使用XPath
。这节省了我很多时间!只需右键单击所需的标签,然后单击复制xpath。
然后只需使用类似于此处的语法单击对象即可:
elem = driver.find_element_by_xpath('//some_xpath')
elem.click()
答案 1 :(得分:1)
您可以链接find_*
函数以更详细地了解WebElement查询:
first_result.find_element_by_tag_name("a").click()
答案 2 :(得分:0)
要点击链接Python (langage)
,请诱导WebDriverWait
()并等待element_to_be_clickable
()并使用css selector
或xpath
或link_text
CSS选择器:
driver.get("https://en.wikipedia.org")
WebDriverWait(driver,10).until(EC.element_to_be_clickable((By.ID,"searchInput"))).send_keys("python", Keys.RETURN)
first_result = WebDriverWait(driver,10).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "a[title='Python (langage)']")))
first_result.click()
Xpath:
driver.get("https://en.wikipedia.org")
WebDriverWait(driver,10).until(EC.element_to_be_clickable((By.ID,"searchInput"))).send_keys("python", Keys.RETURN)
first_result = WebDriverWait(driver,10).until(EC.element_to_be_clickable((By.XPATH, "//a[@title='Python (langage)']")))
first_result.click()
LINK_TEXT:
driver.get("https://en.wikipedia.org")
WebDriverWait(driver,10).until(EC.element_to_be_clickable((By.ID,"searchInput"))).send_keys("python", Keys.RETURN)
first_result = WebDriverWait(driver,10).until(EC.element_to_be_clickable((By.LINK_TEXT, "Python (langage)")))
first_result.click()