Python和selenium:即使我设置了首选项,firefox也会在下载时继续创建对话框

时间:2017-12-28 17:00:59

标签: python selenium firefox

我使用selenium和firefox网络驱动程序编写了一个程序。

def dowloadFile(link):
    profile = webdriver.FirefoxProfile()
    profile.set_preference('browser.download.folderList', 2) # custom location
    profile.set_preference('browser.download.manager.showWhenStarting', False)
    profile.set_preference('browser.download.dir', '/tmp')
    profile.set_preference('browser.helperApps.neverAsk.saveToDisk', 
    'application/pdf')

    driver = webdriver.Firefox(profile)
    #driver.set_window_position(-10000,0)
    driver.get(link)
    s = BeautifulSoup(driver.page_source, "html.parser")
    st=s.find('div',{"class":"bloc-docs-link bloc-250"})
    #print("hadiii ST: "+str(st))
    x=st.find('a')
    fm=x.get('href')
    fm="https://www.marchespublics.gov.ma/"+fm
    driver.get(fm)
    driver.quit()

我的函数将链接作为参数,然后获取该链接,最后找到另一个下载文件的链接。 我的问题是,即使我设置我的firefox的首选项,它总是在下载时继续显示对话框,以确认我是否要保存它!我不知道该怎么做,所以我可以在没有这个对话框的情况下下载文件。

请帮忙。提前谢谢。

2 个答案:

答案 0 :(得分:1)

我也遇到过这个问题。我刚刚完成了这个。注意:它确实需要更多时间,所以如果你有大量的文件正在下载,这可能不值得。否则,这将成功。

创建一个可以在对话框中使用的警报对象,例如:

alert = driver.switch_to_alert()

导入预期条件:

from selenium.webdriver.support import expected_conditions as EC

然后,创建一个指示浏览器等待直到提示预期条件(警报)的函数。

WebDriverWait(browser, 3).until(EC.alert_is_present()
except TimeoutException:

最好把它作为try / except块,但不是强制性的。

然后,在selenium控制警报窗口后,只需使用警报对象的'accept'方法确认下载:

alert.accept()

该功能可能如下所示:

    try:
        alert = driver.switch_to_alert()
        alert_wait()
        alert.accept()
    except print('No alertfound')

此外,我强烈建议您使用requests / BeautifulSoup模块,这样您就不必渲染浏览器并体验浏览大量网页所带来的延迟。请求模块在幕后完成所有操作。如果您需要在下载前输入密码,这会变得棘手。如果没有,BeautifulSoup库非常适合抓取标签/ href,在列表中收集它们,然后使用类似的requests.get()方法逐个循环它们。

事实上,我上次遇到这个问题时,我使用了请求模块而不是selenium,并且自动接受了警报窗口。快速闪电。

答案 1 :(得分:0)

首先,你为什么要使用beautifulsoup?!利用n1=range(0,49) n=n1[1::6] x1=range(1,44) x=x1[::6] print (zip(x,n))

其次,请确认您目标的PDF文件实际上具有适当的mimetype。见http://yizeng.me/2014/05/23/download-pdf-files-automatically-in-firefox-using-selenium-webdriver/