我正在尝试打开一个页面,然后单击下载按钮。对于具有download元素的页面,它可以正常工作,但对于不具有该元素的页面,它会引发错误
代码:
for i in data["allurl"]:
driver.get('{0}'.format(i))
if(driver.find_element_by_id('ContentPlaceHolder1_grdFileUpload_lnkDownload_0')):
button_element = driver.find_element_by_id('ContentPlaceHolder1_grdFileUpload_lnkDownload_0')
button_element.click()
else:
pass
它应该通过而不是引发错误,但是当我运行它时说:
NoSuchElementException:消息:没有这样的元素:无法找到 元件: {“ method”:“ id”,“选择器”:“ ContentPlaceHolder1_grdFileUpload_lnkDownload_0”}
我该如何解决?
答案 0 :(得分:1)
driver.find_element_by_id()
不会返回if语句期望的True
或False
。更改您的if语句,或使用try / except语句。
from selenium.common.exceptions import NoSuchElementException
for i in data["allurl"]:
driver.get('{0}'.format(i))
try:
button_element = driver.find_element_by_id('ContentPlaceHolder1_grdFileUpload_lnkDownload_0')
button_element.click()
except NoSuchElementException:
pass
答案 1 :(得分:0)
from selenium.common.exceptions import NoSuchElementException
try:
button_element = driver.find_element_by_id('ContentPlaceHolder1_grdFileUpload_lnkDownload_0')
except NoSuchElementException:
pass
else:
button_element.click()
请注意,即使它按预期工作,也效率不高,因为您对元素进行了两次搜索。
编辑:包括异常的导入语句
更新:作为补充说明,假设data["allurl"]
中的元素是url(即字符串),则不需要格式化字符串。 driver.get(i)
可以。而且i
对于变量名来说不是很好的选择-最好使用更有意义的东西。...
答案 2 :(得分:0)
检查web元素的长度计数。如果它大于0,则该元素可用,然后单击否则将进入else条件。
for i in data["allurl"]:
driver.get('{0}'.format(i))
if len(driver.find_elements_by_id('ContentPlaceHolder1_grdFileUpload_lnkDownload_0'))>0:
button_element = driver.find_element_by_id('ContentPlaceHolder1_grdFileUpload_lnkDownload_0')
button_element.click()
else:
pass