当前位置: 首页 > 知识库问答 >
问题:

尽管看起来相同的字符串,但Selenium网络驱动程序找不到XPATH

陈淳
2023-03-14

这个问题与我之前的两个问题有关:诱导WebDriver等待特定元素和刮擦中的不一致性

我正在把所有的Air Jordan运动鞋从鞋底上刮掉https://www.grailed.com/.feed是一个无限滚动的运动鞋列表,我正在使用seleniumwebdriver来抓取数据。我的问题是,鞋的图像似乎需要一段时间才能加载,因此它会抛出很多错误。我在图像的xpath中找到了模式。第一个图像的xpath是/html/body/div[3]/div[6]/div[3]/div[3]/div[2]/div[1]/a/div[2]/img,第二个是/html/body/div[3]/div[6]/div[3]/div[3]/div[2]/div[2]/a/div[2]/img等。它遵循这个线性序列,第二个到最后一个div索引每次增加一个。为了处理这个问题,我在循环中加入了以下内容(只包含相关代码)。

    i = 1
    while len(sneakers) < sneaker_count:
    # Scroll down to bottom
    driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
    # Get sneakers currently on page and add to sneakers list
    feed = driver.find_elements_by_class_name('feed-item')
    for item in feed:
        xpath = "/html/body/div[3]/div[6]/div[3]/div[3]/div[2]/div[2]/div[" + str(i) +   "]/a/div[2]/img"
        img = WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH, xpath)))
        i += 1
    new_height = driver.execute_script("return document.body.scrollHeight")
    if new_height == last_height:
        break
    last_height = new_height

问题是,在大约第5双鞋之后,wait语句超时,似乎在这双鞋之后传入的xpath未被识别。我使用FirefoxDeveloper使用复制xpath功能检查xpath,它似乎与打印时传入的xpath相同。我使用含硒的ChromeDriver,但我认为这与此无关。有人知道为什么xpath不再被识别,即使它们看起来是相同的吗?

更新:所以使用一个Xpath检查器插件到Chrome中,它会检测项目1-4的Xpath,但通常在项目6之后停止检测。当我检查xpath时(在Chrome和FireFox开发者模式下,xpath看起来仍然相同,但是当我使用“CSS和xpath检查器”时它没有检测到它们),它似乎仍然没有出来。这对我来说是一个巨大的谜。

共有1个答案

傅皓君
2023-03-14

我发现了问题。xpath很好,但是在前4-5个元素之后,图像被延迟加载。这意味着必须使用不同的解决方案才能刮取这些图像。这并不是因为加载时间太长,而是它们只是加载HTML中的占位符。

 类似资料:
  • 我正在尝试使用Selenium web驱动程序。我正在使用asp。net mvc。我已经设置了一个非常基本的测试。我基本上只是想打开浏览器。 但当我运行测试我得到这个错误消息 结果消息: 文件c:\chromedriver.exe\chromedriver.exe不存在。驱动程序可以在http://chromedriver.storage.googleapis.com/index.html下载 我

  • 我正试图遵循一个关于Selenium的教程,http://selenium-python.readthedocs.io/getting-started.html.我已经下载了最新版本的并将其复制到。然而,当我尝试 我得到以下错误消息: 从https://github.com/SeleniumHQ/selenium/issues/3884看,似乎其他用户也遇到了类似的问题,但Selenium团队无法

  • 我正试图在eclipse中运行我的第一个webdriver脚本。使用jre1。8.0_1111. 我使用了下面的代码,但它显示了错误。请帮我查一下密码。 错误堆栈 线程“main”java中出现异常。lang.IllegalStateException:驱动程序可执行文件的路径必须由webdriver设置。壁虎。驱动系统属性;有关更多信息,请参阅github。com/mozilla/geckodr

  • 在升级到firefox 26.0之前,我在firefox的早期版本中使用了selenium 2.35。以前我的测试运行得很好,但现在我得到了以下错误。 我试图降级火狐的版本,但无法从mozilla网站获得任何以前的版本。 我还尝试了所有的selenium版本2.36,2.37,2.38,2.39但似乎没有一个与火狐26.0兼容。一旦我试图用2.36到2.39替换selenium 2.35,代码中就

  • 问题内容: 输出 >无法连接到数据库服务器java.lang.ClassNotFoundException 问题答案: 看来您应该将MySQL驱动程序jar放入 类路径中 。

  • 问题内容: 我刚刚用Apache,MySQL和PHP安装了Debian Lenny,并且收到了PDOException 。 这是它所指的特定代码行: ,,,和是我所定义的常量。它在生产服务器(以及我以前的Ubuntu Server设置)上运行良好。 这与我的PHP安装有关吗? 搜索互联网没有帮助,我得到的只是专家交流和示例,但没有解决方案。 问题答案: 您需要有一个名为pdo_mysql的模块。在