我要抓取的网站是'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结构。我遇到了一些困难,试图以一种全面而有用的方式将其复制粘贴到此处。
答案 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