【问题标题】:Selenium not extracting info using xpathSelenium 不使用 xpath 提取信息
【发布时间】:2020-09-08 04:50:22
【问题描述】:

我正在尝试使用 selenium 从amazon website 中提取一些信息。但我无法在 selenium 中使用 xpath 抓取这些信息。

在下图中,我想提取突出显示的信息。

这是我正在使用的代码

try:
    path = "//div[@id='desktop_buybox']//div[@class='a-box-inner']//span[@class='a-size-small')]"
    seller_element = WebDriverWait(driver, 5).until(
        EC.visibility_of_element_located((By.XPATH, path)))
except Exception as e:
    print(e)

当我运行这段代码时,它显示seller_element = WebDriverWait(driver, 5).until( EC.visibility_of_element_located((By.XPATH, path))) 存在错误,但没有说明是什么异常。

我尝试在网上查找,发现当 selenium 无法在网页中找到该元素时会发生这种情况。

但我认为我指定的路径是正确的。请帮帮我。

提前致谢

[EDIT-1]

这是我得到的例外

Message:

【问题讨论】:

  • 为什么不通过 CSS 选择器而不是 xpath 来获取元素?如果你尝试一下,这行得通吗?
  • 我也试过了。有多个元素具有相同的类。所以硒没有得到我想要的正确信息
  • 您好,请问有什么问题吗?
  • 路径似乎根本不正确。
  • @arundeepchohan selenium 无法访问我要提取的元素。我已经在问题中发布了代码。请看一看。

标签: python selenium xpath css-selectors webdriverwait


【解决方案1】:
//div[class='a-section a-spacing-none a-spacing-top-base']//span[class='a-size-small a-color-secondary']

XPath 可能是这样的。你可以缩短它。

CSS 选择器可以是等等。

.a-section.a-spacing-none.a-spacing-top-base
.a-size-small.a-color-secondary

【讨论】:

  • 这给出了同样的错误。这可能与网站的设计方式有关吗?
【解决方案2】:

我认为原因是 xpath 表达式不正确。

以如下元素为例,表示span有两个类:

<span class="a-size-small a-color-secondary">

所以,span[@class='a-size-small') 将不起作用。

你可以使用 xpath 来代替这个

//span[contains(@class, 'a-size-small') and contains(@class, 'a-color-secondary')]

或 cssSelector 为

span.a-size-small.a-color-secondary

【讨论】:

    【解决方案3】:

    亚马逊正在根据您居住的国家/地区更新其内容,因为我点击了您提供的链接,但我没有找到您正在寻找的元素,只是因为该商品不在此处出售印度。

    因此,简而言之,如果您坐在印度并试图找到您的元素,它并不存在,但是当您将位置更改为“美国”时。它出现在那里。

    解决方案 - 更改位置

    【讨论】:

      【解决方案4】:

      要打印元素的Ships from and sold by Amazon.com,您必须为visibility_of_element_located() 诱导WebDriverWait,您可以使用以下Locator Strategies 之一:

      • 使用CSS_SELECTORget_attribute()

        print(WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.CSS_SELECTOR, "div.a-section.a-spacing-none.a-spacing-top-base > span.a-size-small.a-color-secondary"))).get_attribute("innerHTML"))
        
      • 使用XPATHtext 属性:

        print(WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH, "//div[@class='a-section a-spacing-none a-spacing-top-base']/span[@class='a-size-small a-color-secondary']"))).text)
        
      • 注意:您必须添加以下导入:

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

      您可以在How to retrieve the text of a WebElement using Selenium - Python找到相关讨论


      结尾

      链接到有用的文档:

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-12-05
        • 1970-01-01
        • 2015-06-09
        • 1970-01-01
        相关资源
        最近更新 更多