使用Selenium click()下载多个文件? [英] Downloading multiple files using Selenium click()?

查看:167
本文介绍了使用Selenium click()下载多个文件?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

使用Firefox / Python / Selenium--我可以在网页上的文件链接上使用 click()来下载文件,文件下载到我的下载不过,当我在多于一个链接上添加更多行到 click()时,脚本不再按预期运行。而不是被下载的文件,它们都在单独的浏览器窗口中打开,这些窗口在脚本完成后全部关闭。



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



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



我试图下载链接到介绍和第1-4卷的所有部分。



我有一本字典定位器:

$ $ $ $ $ $ $ $ $ $ $ $ $ $> IgDeskbookPageMap = dict(IgDeskbookBannerXpath =// div [contains(text(),'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

这是方法: / b>

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

这些是click()调用(有3个以上,只是截断对于空间:

  self.click(10,
id,
IgDeskbookPageMap ['IgDeskbookIntroId' ]

self.click(10,
id,
IgDeskbookPageMap ['IgDeskbookVol1Part1Id']

self.click(10,
id,
IgDeskbookPageMap ['IgDeskbookVol1Part2Id']


解决方案

我添加了下面的代码来启动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)
se lf.driver = webdriver.Firefox(profile)


Using Firefox/Python/Selenium-- I am able to use click() on a file link on a webpage to download it, and the file downloads to my Downloads folder as expected.

However, when I add more lines to click() on more than 1 link, the script no longer runs as expected. Instead of the files being downloaded, they are all opening in separate browser windows, which all close after the script completes.

Is this by design or is there a way around it or a better way to download multiple files on a webpage?

This is the website in question: https://www.treasury.gov/about/organizational-structure/ig/Pages/igdeskbook.aspx

I am trying to download the links to the Introduction and all parts of Volumes 1-4.

I have a dictionary of the locators:

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"

This is the method:

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

These are the click() calls (there are more than 3, but just truncating here for space:

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

解决方案

I added the following code for launching Firefox and now the download behavior works as expected when clicking on each file:

     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)

这篇关于使用Selenium click()下载多个文件?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆