Webdriver返回有效的XPath并且元素存在时,会报告NoSuchElementException

2024-06-10 07:34:02 发布

您现在位置:Python中文网/ 问答频道 /正文

页面上的每个Google review分数元素(其中有20个)如this

enter image description here

在XPath中定义,因此:

  //ol/div[2]/div/div/div[2]/div[%s]/div/div[3]/div/a[1]/div/div/div[2]/div/span

使用Python和WebDriver,我可以这样提取它们(其中result是范围(1,21)内的I):

^{pr2}$

出于某种原因(我还没有确定),每当review count为零,文本为'noreviews',这将返回一个NoSuchElementException。有人会认为上面的XPath会继续工作(实际上,在Firebug中查看它的XPath可以证明它与这样一个得分不为零的元素遵循完全相同的结构)。所以我现在用try/catch来处理这个问题:

try:
    reviewCount = driver.find_element_by_xpath("//ol/div[2]/div/div/div[2]/div[%s]/div/div[3]/div/a[1]/div/div/div[2]/div/span" % result).text
    reviewCount = int(reviewCount.split()[0].replace(',',''))
except NoSuchElementException, e:
    reviewCount = 0

在我的计划中,从时间角度来看,这是非常昂贵的。每次遇到没有评论时,程序都需要几秒钟来处理它。为了加快速度,我可以尝试使用find_-elementS\uxpath一次性获取所有评审分数。但是,我如何解释递增的div索引呢?我如何在每个元素中保持某种异常处理?在

//ol/div[2]/div/div/div[2]/div[1]/div/div[3]/div/a[1]/div/div/div[2]/div/span
//ol/div[2]/div/div/div[2]/div[2]/div/div[3]/div/a[1]/div/div/div[2]/div/span
etc.

更重要的是,为什么Webdriver返回NoSuchElementException,该元素存在且正确,只是其文本值不同?在


Tags: 文本div元素google页面resultfindxpath