一、需求
从目标网站登陆后,从指定页面的下载链接处点击下载,鼠标悬浮后指定格式的文件,该页面有多个分页,以id区分
二、实现
STEP1:构造浏览器
浏览器下载时每次都弹出弹窗询问,需要先禁用弹窗和设置下载路径
#火狐 开始-运行-firefox.exe -ProfileManager
#profile=webdriver.FirefoxProfile(r'C:\Users\Administrator\AppData\Roaming\Mozilla\Firefox\Profiles\4a4m4hwv.ford')
#wd=webdriver.Firefox(firefox_profile=profile)
#谷歌
options = webdriver.ChromeOptions()
prefs = {'profile.default_content_settings.popups': 0, 'download.default_directory': 'G:\\temp files'}#屏蔽弹窗,设置路径
options.add_experimental_option('prefs', prefs)
wd = webdriver.Chrome(options=options)
STEP2:登录网站
#打开网址
wd.get('网站登陆url')
wd.maximize_window()#窗口最大化,否则后面的一些元素找不到而报错
#输入用户名和密码,点击登录
user = wd.find_element_by_id('sawlogonuser')
user.send_keys('用户名')
user = wd.find_element_by_id('sawlogonpwd')
user.send_keys('mima123456')
wd.find_element_by_id('idlogon').click()
STEP3:下载文件
下载第1分页
wd.get('目标下载url')#跳转页面
wd.find_element_by_id('dashboard_page_1_tab').click()#选择table
#找到”导出“并点击
WebDriverWait(wd,10).until(EC.presence_of_element_located((By.NAME,'ReportLinkMenu')))
wd.find_element_by_name('ReportLinkMenu').click()
#找到”Excel"并鼠标悬浮
WebDriverWait(wd,10).until(EC.presence_of_element_located((By.LINK_TEXT,'Excel')))
a=wd.find_element_by_link_text('Excel')
ActionChains(wd).move_to_element(a).perform()#悬浮
#找到“Excel 2007+”并点击,执行下载操作
WebDriverWait(wd,10).until(EC.presence_of_element_located((By.PARTIAL_LINK_TEXT,'Excel 2007+')))
wd.find_element_by_partial_link_text('Excel 2007+').click()
第i分页的操作流程一模一样,id:‘dashboard_page_’+str(i)+’_tab’
三、整合
def main():
from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import time
#火狐 开始-运行-firefox.exe -ProfileManager
#profile=webdriver.FirefoxProfile(r'C:\Users\Administrator\AppData\Roaming\Mozilla\Firefox\Profiles\4a4m4hwv.ford')
#wd=webdriver.Firefox(firefox_profile=profile)
#谷歌
options = webdriver.ChromeOptions()
prefs = {'profile.default_content_settings.popups': 0, 'download.default_directory': 'G:\\temp files'}#屏蔽弹窗,设置路径
options.add_experimental_option('prefs', prefs)
wd = webdriver.Chrome(options=options)
#打开网址
wd.get('网站登陆url')
wd.maximize_window()#窗口最大化,否则后面的一些元素找不到而报错
#输入用户名和密码,点击登录
user = wd.find_element_by_id('sawlogonuser')
user.send_keys('用户名')
user = wd.find_element_by_id('sawlogonpwd')
user.send_keys('密码123456')
wd.find_element_by_id('idlogon').click()
#下载文件
def downloads(url,inlist):
wd.get(url)#跳转页面
for i in inlist:
wd.find_element_by_id('dashboard_page_'+str(i)+'_tab').click()#选择table
WebDriverWait(wd,10).until(EC.presence_of_element_located((By.NAME,'ReportLinkMenu')))
wd.find_element_by_name('ReportLinkMenu').click()
WebDriverWait(wd,10).until(EC.presence_of_element_located((By.LINK_TEXT,'Excel')))
a=wd.find_element_by_link_text('Excel')
ActionChains(wd).move_to_element(a).perform()#悬浮
WebDriverWait(wd,10).until(EC.presence_of_element_located((By.PARTIAL_LINK_TEXT,'Excel 2007+')))
wd.find_element_by_partial_link_text('Excel 2007+').click()
url1='第一个下载页面url'
list1=[0,1,2,3,4,7,9,10]
downloads(url1,list1)
url2='第二个下载页面url'
list2=[0]
downloads(url2,list2)
time.sleep(5)
wd.close()
if __name__=='__main__':main()