python脚本打开一个页面,然后单击下载

时间:2019-09-10 08:16:24

标签: python selenium selenium-chromedriver

我正在尝试打开一个页面,然后单击下载按钮。对于具有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”}

我该如何解决?

3 个答案:

答案 0 :(得分:1)

driver.find_element_by_id()不会返回if语句期望的TrueFalse。更改您的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