【问题标题】:I'm not sure why this xpath is unable to be located using Python Selenium我不确定为什么无法使用 Python Selenium 定位此 xpath
【发布时间】:2021-02-27 08:21:56
【问题描述】:

我正在尝试抓取网站上以无限滚动的网格格式显示的每个项目。但是,我什至坚持使用 xpath 获取第二个项目,因为它说: selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"xpath","selector":"//div[@class='el-card advertisement card is-always-shadow'][2]"}

x = 1

while x < 5:
    time.sleep(5)
    target = driver.find_element_by_xpath(f"//div[@class='el-card advertisement card is-always-shadow'][{x}]")
    target.click()
    wait.until(EC.visibility_of_element_located((By.ID, "details")))
    print(driver.current_url)
    time.sleep(5)
    driver.back()
    time.sleep(5)
    WebDriverWait(driver, 3).until(EC.title_contains("Just Sold"))
    time.sleep(5)
    x += 1

使用我的 f-string xpath,它能够找到该类的第一个 div 并打印 URL,但是当它完成 while 循环的一次迭代时,它无法找到该类的第二个 div(所以@987654321 @)。

我一直尝试使用 time.sleep() 来监控它,以查看它失败的确切位置,因为我认为它可能在页面加载之前运行,因此无法找到它,但我给了它足够的时间完成每个页面的加载,但我找不到问题。

这是该页面上 HTML 的结构: 在每个 div 中都有一个具有该名称的类(以及我也尝试过使用的“el-card__body”),一个用于显示的每个项目。 (这是每个 div 的样子)

提前感谢您的帮助!

(免责声明:这是一篇研究论文,我不打算出售/受益于所收集的信息)

【问题讨论】:

  • 您可以尝试targets = driver.find_elements_by_xpath("//div[@class='el-card advertisement card is-always-shadow']"(注意复数并删除[{x}])一次找到所有元素,看看有多少。
  • 最好将 html 作为文本发布。我的搜索功能不适用于图片。
  • 刚刚尝试过,可以确认它制作了一个长度为 10 的列表,因为它应该(每次滚动超过页面限制时添加 10 个项目)
  • 我不知道为什么您的方法不起作用,但似乎答案是使用该命令将它们全部获取并循环遍历结果。
  • 来自哪个网站

标签: python selenium selenium-webdriver xpath web-scraping


【解决方案1】:

按照 tdelaney 的建议,使用 find_elements_by_xpath 将每个项目存储在列表中,然后遍历它们就可以了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-09
    • 2020-03-13
    • 1970-01-01
    • 2019-10-13
    • 2016-09-17
    • 1970-01-01
    相关资源
    最近更新 更多