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

2024-04-25 08:04:33 发布

您现在位置:Python中文网/ 问答频道 /正文

使用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"

方法如下:

^{pr2}$

这些是click()调用(有3个以上的调用,但只是为了节省空间而截断:

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

Tags: 文件方法self脚本id网页链接selenium
2条回答

如果在不同的选项卡中打开来下载这样多个文件,可以使用您自己的编码语言执行以下算法步骤:

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

我为启动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)

相关问题 更多 >

    热门问题