硒弄乱了xpaths

时间:2020-06-22 17:58:39

标签: python selenium xpath web-scraping

我要抓取的网站是'https://www.lamiastampante.it/cerca_codice_cartuccia.php?codice=D111L&lg=it',为此我将python与Selenium结合使用。 我想单击搜索到的第一个产品的标题。 它是 div 中的一个 a 元素,但是当我复制此类元素的父级XPath(即XPath)时,我的python脚本认为我是在指另一个(错误)元素,它是位于网页右侧的窗格。 我注意到,因为如果我打印出从该XPath获得的元素的类,则会得到“面板标题”,而它应该是“ col-xs-12 col-sm-12 col-md-12”。

这是我很短的python脚本:

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
from bs4 import BeautifulSoup

driver = webdriver.Firefox()
driver.get("https://www.lamiastampante.it")

driver.find_element(By.ID, "form_oem_code").send_keys("D111L" + Keys.ENTER)

first_product = driver.find_element_by_xpath("""/html/body/div[6]/div/div[1]/div[4]/div[1]""")# XPath of the target's parent element.
# first_product.click() /Commented out because I should first get the <a> element within that contains the link that can be clicked.

您可以访问网页并检查其HTML结构。我遇到了一些困难,试图以一种全面而有用的方式将其复制粘贴到此处。

1 个答案:

答案 0 :(得分:0)

要在搜索结果诱导WebDriverWait()并为element_to_be_clickable()及其之后的xpath之后点击链接。

driver.get("https://www.lamiastampante.it")
driver.find_element(By.ID, "form_oem_code").send_keys("D111L" + Keys.ENTER)
WebDriverWait(driver,10).until(EC.element_to_be_clickable((By.XPATH,"(//a[starts-with(@id,'a_') and contains(.,'Toner')])[1]"))).click()

或者yon可以使用xapth以下的visibility_of_all_elements_located()。

driver.get("https://www.lamiastampante.it")
driver.find_element(By.ID, "form_oem_code").send_keys("D111L" + Keys.ENTER)
elements=WebDriverWait(driver,10).until(EC.visibility_of_all_elements_located((By.XPATH,"//a[starts-with(@id,'a_') and contains(.,'Toner')]")))
elements[0].click()

您需要导入以下库。

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