this等网页上的每个Google评论分数元素(其中有20个):
在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,并且它的文本值只有不同?
答案 0 :(得分:0)
使用xpath多个条件
示例: -
//input[@id='username' or @name='pwd']
参考以下主题: -
http://stackoverflow.com/questions/12562597/two-conditions-using-or-in-xpath