使用Selenium click()下载多个文件?

时间:2016-06-06 18:22:44

标签: python selenium firefox selenium-webdriver

使用Firefox / Python / Selenium--我可以在网页上的文件链接上使用click()下载它,并按预期将文件下载到我的下载文件夹。

但是,当我在多个链接上向click()添加更多行时,脚本将不再按预期运行。它们都在不同的浏览器窗口中打开,而不是正在下载的文件,这些窗口在脚本完成后全部关闭。

这是设计还是有办法或者更好的方式来下载网页上的多个文件?

这是有问题的网站:https://www.treasury.gov/about/organizational-structure/ig/Pages/igdeskbook.aspx

我正在尝试下载简介的链接以及第1-4卷的所有部分。

我有一个定位词典:

IgDeskbookPageMap = dict(IgDeskbookBannerXpath = "//div[contains(text(), 'The Inspector General Deskbook')]",
                         IgDeskbookIntroId     = "anch_202",
                         IgDeskbookVol1Part1Id = "anch_203",
                         IgDeskbookVol1Part2Id = "anch_204",
                         IgDeskbookVol1Part3Id = "anch_205",
                         IgDeskbookVol1Part4Id = "anch_206",
                         IgDeskbookVol2Id      = "anch_207",
                         IgDeskbookVol3Id      = "anch_208",
                         IgDeskbookVol4Part1Id = "anch_209",
                         IgDeskbookVol4Part2Id = "anch_210",
                         IgDeskbookVol4Part3Id = "anch_211"

这是方法:

 def click(self, waitTime, locatorMode, Locator):
    self.wait_until_element_clickable(waitTime, locatorMode, Locator).click()

这些是click()调用(有3个以上,但只是截断空格:

self.click(10,
                 "id",
                 IgDeskbookPageMap['IgDeskbookIntroId']
      )
      self.click(10,
                 "id",
                 IgDeskbookPageMap['IgDeskbookVol1Part1Id']
      )
      self.click(10,
                 "id",
                 IgDeskbookPageMap['IgDeskbookVol1Part2Id']
      )

2 个答案:

答案 0 :(得分:1)

如果在不同标签 中打开 ,则下载此类多个文件的方法可能是按照您自己的编码语言执行这些算法步骤:

for( all such links) :
   click() the pdf link
   findElement the download element
   click() the download link
   close the tab
   switch back to last tab  //should ideally be completed with previous step

答案 1 :(得分:1)

我添加了以下用于启动Firefox的代码,现在点击每个文件时下载行为按预期工作:

     profile = webdriver.FirefoxProfile()
     profile.set_preference('browser.download.folderList', 2)
     profile.set_preference('browser.download.manager.showWhenStarting', False)
     profile.set_preference('browser.helperApps.alwaysAsk.force', False)
     profile.set_preference('browser.helperApps.neverAsk.saveToDisk', 'application/pdf,application/x-pdf')
     profile.set_preference("plugin.disable_full_page_plugin_for_types", "application/pdf")
     profile.set_preference("pdfjs.disabled", True)
     self.driver = webdriver.Firefox(profile)