在Selenium中验证元素存在性

0 投票
1 回答
579 浏览
提问于 2025-04-28 10:04

我看了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() 方法返回的是元素在页面上显示的大小,也就是它的高度和宽度。

撰写回答