硒:单击div内的链接

时间:2020-06-01 18:48:36

标签: python selenium web-scraping

我正在学习硒,并且正在尝试一件简单的事情:单击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的代码段:

enter image description here

在没有任何类名,ID或名称的情况下,如何定位实际的<a>链接?

3 个答案:

答案 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 selectorxpathlink_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()