gpt4 book ai didi

python - 使用 selenium 和 python 进行网页抓取 - 包含文本的 xpath

转载 作者:行者123 更新时间:2023-12-04 09:36:37 24 4
gpt4 key购买 nike

我会尽量让它变得很短。我正在尝试点击从网站搜索中得出的产品。基本上有一个匹配产品列表,我想点击第一个包含我在其标题中搜索的产品名称的产品。我将发布该网站的链接,以便您检查其 DOM 结构:https://www.tonercartuccestampanti.it/#/dfclassic/query=CE285A&query_name=match_and在这种情况下,许多包含我的查询字符串,我只想单击第一个。

这是我为此编写的代码片段:

def click_on_first_matching_product(self):
first_product = WebDriverWait(self.driver, 6).until(
EC.visibility_of_all_elements_located((By.XPATH, f"//a[@class='df-card__main']/div/div[@class=df-card__title] and contains(text(), '{self.product_code}')"))
)[0]
first_product.click()

问题是 6 秒过去了,它找不到满足我写的 xPath 条件的元素,但我不知道如何让它工作。我正在尝试获取搜索结果 a element 并检查其结构中的标题是否包含我搜索的查询字符串。我能得到一些帮助和解释吗?我对 selenium 和 XPaths 很陌生......

我还可以提供一个指向可靠的 selenium 文档的链接吗?我很难找到一个好的。也许一个也解释了如何为 xPaths 创造条件的人。

最佳答案

您需要考虑几件事。您的用例是点击第一个搜索结果或点击与卡片标题相关的项目。如果单击确定的 WebElementvisibility_of_all_elements_located() 引入 WebDriverWait太昂贵


要单击与卡片标题相关的项目,您必须诱导 WebDriverWait对于 element_to_be_clickable(),您可以使用以下 基于 Locator Strategies :

  • 直接使用文本 CE285A Toner Compatible Per Hp LaserJet P1102:

    driver.get('https://www.tonercartuccestampanti.it/#/dfclassic/query=CE285A&query_name=match_and')
    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//div[text()='CE285A Toner Compatibile Per Hp LaserJet P1102']"))).click()
  • 通过 format() 为文本使用变量:

    driver.get('https://www.tonercartuccestampanti.it/#/dfclassic/query=CE285A&query_name=match_and')
    text = "CE285A Toner Compatibile Per Hp LaserJet P1102"
    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//div[text()='{}']".format(text)))).click()
  • 通过 %s 为文本使用变量:

    driver.get('https://www.tonercartuccestampanti.it/#/dfclassic/query=CE285A&query_name=match_and')
    text = "CE285A Toner Compatibile Per Hp LaserJet P1102"
    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//div[text()='%s']"% str(text)))).click()

要点击第一个搜索产品,您必须诱导 WebDriverWait对于 element_to_be_clickable(),您可以使用以下任一项 Locator Strategies :

  • CSS_SELECTOR:

    driver.get('https://www.tonercartuccestampanti.it/#/dfclassic/query=CE285A&query_name=match_and')
    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "div.df-card>a"))).click()
  • XPATH:

    driver.get('https://www.tonercartuccestampanti.it/#/dfclassic/query=CE285A&query_name=match_and')
    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//div[@class='df-card']/a"))).click()

注意:您必须添加以下导入:

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

关于python - 使用 selenium 和 python 进行网页抓取 - 包含文本的 xpath,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62553465/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com