在Selenium中验证元素存在性
我看了API文档还是搞不清楚该怎么做。我想从网上抓取数据,下面是我写的代码:
browser = webdriver.Firefox()
browser.get(url)
browser.find_element_by_xpath('//path')
在执行find_element这部分之前,我想先确认一下这个元素是否真的存在。我试过以下几种方法:
try:
browser.find_element_by_xpath('//path')
except NoSuchElementException:
print ('failure')
还有
if (browser.find_element_by_xpath('//path')[0].size() == 0):
print ('failure')
但是这些方法都不管用,尽管API说size()是WebElement
的一个可调用函数,而异常是由find
系列的方法抛出的。我不明白为什么这些方法都不行。能不能解释一下原因,并给我一个有效的例子?
1 个回答
2
你的第一段代码应该在找不到元素时抛出一个叫做 NoSuchElementException
的错误。如果没有抛出这个错误,那么从你提问的信息来看,原因就不太清楚了。(或者你可能是期望找不到元素,但实际上却找到了?)
第二段代码是行不通的,因为 find_element_...
这些方法返回的是 WebElement
对象,而不是对象的列表。你需要这样做:
if len(browser.find_elements_by_xpath('//path')) == 0:
print ('failure')
注意这里的复数形式 find_elements_...
。那些用复数形式的函数返回的是列表,如果没有找到任何东西,返回的列表长度就是零。
顺便说一下,WebElement
对象上的 size()
方法返回的是元素在页面上显示的大小,也就是它的高度和宽度。