在这个案例中最重要也是我花了主要精力解决的问题就是火狐浏览器下载文件时会自动弹出下载弹框的这个问题。
解决这个问题可以参照以下步骤(本次案例中要下载的文件格式为dotx文件,如果有其他格式的文件要修改"browser.helperApps.neverAsk.saveToDisk"这个参数,设置为跟你自己要下载的文件匹配的MIME类型)
MIMEl类型参照
涉及到的文件下载的参数:
- 设置文件保存地址为桌面
profile.set_preference('browser.download.dir','C:\\Users\\EDZ\\Desktop')
- 设置文件保存到设置的地址中(0代表下载到浏览器默认下载路径;设置成2则可以保存到上面设置的指定目录下)
profile.set_preference("browser.download.folderList",2)
- 设置需要自动保存的文件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
修改完成之后就不会再弹出弹框了,而是像这样在右下角默认下载