python selenium 实现在火狐浏览器上下载文件(涉及firefox下载文件相关的配置)

在这个案例中最重要也是我花了主要精力解决的问题就是火狐浏览器下载文件时会自动弹出下载弹框的这个问题。

解决这个问题可以参照以下步骤(本次案例中要下载的文件格式为dotx文件,如果有其他格式的文件要修改"browser.helperApps.neverAsk.saveToDisk"这个参数,设置为跟你自己要下载的文件匹配的MIME类型)
MIMEl类型参照
涉及到的文件下载的参数:

  1. 设置文件保存地址为桌面
profile.set_preference('browser.download.dir','C:\\Users\\EDZ\\Desktop')
  1. 设置文件保存到设置的地址中(0代表下载到浏览器默认下载路径;设置成2则可以保存到上面设置的指定目录下)
profile.set_preference("browser.download.folderList",2)
  1. 设置需要自动保存的文件MIME类型
profile.set_preference("browser.helperApps.neverAsk.saveToDisk","application/octet-stream")

注:从网上查询到的dotx的MIME类型是application/vnd.openxmlformats-officedocument.wordprocessingml.template但是试过不可行,此时查看到响应数据类型为application/octet-stream在这里插入图片描述
修改之后下载就没有问题了,不会再弹出弹框。所以如果试过各种类型还是不行可以到响应数据里面看看。

下载完成
在这里插入图片描述

代码:

from selenium import webdriver
from selenium.webdriver import ActionChains
import time


class MyApplicationTest(object):
	def __init__(self):
		profile = webdriver.FirefoxProfile()
		profile.set_preference('browser.download.dir','C:\\Users\\EDZ\\Desktop')
		profile.set_preference("browser.download.folderList",2)
		profile.set_preference("browser.download.manager.showWhenStarting",False)
		profile.set_preference("browser.helperApps.neverAsk.saveToDisk","application/octet-stream")
        self.driver = webdriver.Firefox(firefox_profile=profile)

	def MyApplicationLogin(self,url,name,pwd):
		print("开始1")
		self.driver.get(url)
		time.sleep(2)
		print("开始2")
		el = self.driver.find_element_by_css_selector('[placeholder=请输入账号]')
		print("开始3")
		el.send_keys(name)
		el01 = self.driver.find_element_by_css_selector("[placeholder=xxxx]")
		print("开始3")
		el01.send_keys(pwd)
		time.sleep(1)
		el02 = self.driver.find_element_by_css_selector(".verify-left-bar")
		action = ActionChains(self.driver)
		action.click_and_hold(el02).perform()
		action.drag_and_drop_by_offset(0,206, 0).perform()  
		time.sleep(1)
		btn = self.driver.find_element_by_css_selector(".login-btn>[type=submit]")
		btn.click()
		time.sleep(3)		
		newurl = self.driver.current_url
		self.CancelPwdRivision(newurl)
		self.click_write_report()
		self.click_report_model()
		# count = 0
		# while True:
			# try:			
				# self.re_send()
			# except Exception as ret:
				# print(ret)
			# count += 1
			# print(count)
		# return newurl
	
	"""定位xxxx"""
	def click_upload_report(self):
		report_manage_link = self.driver.find_element_by_xpath("*//span[text()='xxxx']") 
		time.sleep(1)
		report_manage_link.click()
		time.sleep(1)
		report_manage_link_01 = self.driver.find_element_by_xpath("*//span[text()='xxx']") 
		time.sleep(1)
		report_manage_link_01.click()
		time.sleep(1)
		write_report = self.driver.find_element_by_css_selector("li.el-submenu:nth-child(1) > ul:nth-child(2) > li:nth-child(1) > span")
		time.sleep(1)
		write_report(1)
	
	"""处理修改弹框"""
	def CancelPwdRivision(self,url):
		self.driver.get(url)
		time.sleep(1)
		try:
			btn01 = self.driver.find_element_by_css_selector(".el-message-box__wrapper  .el-message-box__btns button:nth-child(1)") 
			time.sleep(1)
			btn01.click()
		except Exception as ret:
			print(ret)			
	
	"""定位"""
	def click_report_management(self):
		report_manage_link = self.driver.find_element_by_xpath("*//span[text()='xxx']") 
		time.sleep(1)
		report_manage_link.click()
		time.sleep(1)
		report_manage_link_01 = self.driver.find_element_by_xpath("*//span[text()='xxx']") 
		time.sleep(1)
		report_manage_link_01.click()
		time.sleep(1)
		report_manage_link_02 = self.driver.find_element_by_xpath("*//span[text()='xxx']") 
		time.sleep(1)
		report_manage_link_02.click()
		time.sleep(1)
	
	"""定位xxx管理"""
	def click_report_mag(self):
		report_manage_link = self.driver.find_element_by_xpath("*//span[text()='xxxx']") 
		time.sleep(1)
		report_manage_link.click()
		time.sleep(1)
		report_manage_link_01 = self.driver.find_element_by_xpath("*//span[text()='xxxx']") 
		time.sleep(1)
		report_manage_link_01.click()
		time.sleep(1)
	
	"""定位xxxx"""
	def click_write_report(self):		
		report_manage_link = self.driver.find_element_by_xpath("*//span[text()='xxx管理']") 
		time.sleep(1)
		report_manage_link.click()
		time.sleep(1)
		report_manage_link_01 = self.driver.find_element_by_xpath("*//span[text()='xxx管理']") 
		time.sleep(1)
		report_manage_link_01.click()
		time.sleep(1)
		write_report = self.driver.find_element_by_xpath("/html/body/div[1]/section/section/aside/div/div/ul/li[1]/ul/li[1]/span") 
		time.sleep(1)
		write_report.click()
		time.sleep(1)
	
	"""定位xxx板"""	
	def click_report_model(self):		
		company_deep = self.driver.find_element_by_xpath("/html/body/div[1]/section/section/main/div[1]/div/div[2]/div[2]/div/div[2]/div/div[2]/div[1]/div[1]/div[2]/div/div/div[1]/div/div[3]/div[3]/div/span[1]") 
		time.sleep(1)
		ActionChains(self.driver).move_to_element(company_deep).perform()
		time.sleep(1)
		company_deep_zhengquan = self.driver.find_element_by_xpath("/html/body/ul/li[1]")
		time.sleep(1)
		ActionChains(self.driver).move_to_element(company_deep_zhengquan).perform()
		company_deep_zhengquan.click()
		time.sleep(30)

	
	"""xxx功能"""
	def re_send(self):
		time.sleep(1)
		page_01 = self.driver.find_element_by_xpath("*//li[text()='1']") 
		time.sleep(1)
		page_01.click()
		time.sleep(1)
		re_send = self.driver.find_element_by_css_selector('.el-table__fixed-body-wrapper > table:nth-child(1) > tbody:nth-child(2) > tr:nth-child(9) > td:nth-child(15) > div:nth-child(1) > span:nth-child(7)') 
		time.sleep(1)
		re_send.click()
		print("xxxxx")
		time.sleep(1)
		submit = self.driver.find_element_by_css_selector("button.el-button:nth-child(5)") 
		time.sleep(1)
		submit.click()
		time.sleep(1)
		print("xxxx完成")
		"""处理请确认弹框"""
		alert = self.driver.find_element_by_css_selector(".el-message-box__btns > button:nth-child(2)") 
		time.sleep(1)
		alert.click()
	
	"""备用功能-xxx"""
	def CreateAccount(self,url):
		self.CancelPwdRivision(url)
		time.sleep(3)
		system_mng = self.driver.find_element_by_css_selector('aside>ul>li:nth-child(5)>a')
		system_mng.click()
		system_setting = self.driver.find_element_by_css_selector('aside>div>div>ul>li:nth-child(1)') 
		system_setting.click()
		"""定位"xxx"按钮"""
		user_menu = self.driver.find_element_by_css_selector('aside>div>div>ul>li:nth-child(1)>ul>li:nth-child(3)')
		user_menu.click()
		add_user = self.driver.find_element_by_xpath('//*[text()="新增xxx"]/..')
		add_user.click()
		
		
		
if __name__ == "__main__":
	url = "xxxx/login"
	namelist= ["xxxxx"]
	pwdlist = ["888888"]
	po = 0
	while po<len(namelist):
		name = namelist[po]
		pwd = pwdlist[po]
		mapp = MyApplicationTest()
		newurl = mapp.MyApplicationLogin(url,name,pwd)
		time.sleep(2)
		po+=1





修改完成之后就不会再弹出弹框了,而是像这样在右下角默认下载在这里插入图片描述

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值