Webdriver为有效的XPath返回NoSuchElementException,并且元素存在且正确

时间:2015-08-26 17:34:23

标签: python html dom xpath selenium-webdriver

this等网页上的每个Google评论分数元素(其中有20个):

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是i在范围内(1,21):

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

出于某种原因(我尚未确定),每当评论次数为零,且文字为“无评论”时,都会返回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

从我的计划的时间角度来看,这证明是非常昂贵的。每次遇到 No Reviews 时,程序都需要几秒钟的时间来处理它。为了加快速度,我可以尝试使用find_element S _by_xpath一次性获取所有评论分数。但那么,我如何解释递增的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,并且它的文本值只有不同?

1 个答案:

答案 0 :(得分:0)

使用xpath多个条件

示例: -

//input[@id='username' or @name='pwd']

参考以下主题: -

http://stackoverflow.com/questions/12562597/two-conditions-using-or-in-xpath