页面上的每个Google review分数元素(其中有20个)如this:
在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):
出于某种原因(我还没有确定),每当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,该元素存在且正确,只是其文本值不同?在
使用xpath多个条件
在示例:-在
参考下文螺纹:-在
^{pr2}$相关问题 更多 >
编程相关推荐