·如果上传按钮是input标签,只要定位上传按钮,可优先尝试调用send_keys()方法输入文件路径;
·如果需要打开系统窗口,即Window窗口添加本地文件,则可尝试借助AutoIt实现。
文件下载
1.Firefox浏览器
首先通过Firefox浏览器实现文件下载。
对于Firefox,在下载之前需要设置其Profile,具体如下。
·browser.download.dir:指定下载路径;
·browser.download.folderList:设置成0表示下载到桌面;设置成1表示下载到默认路径;设置成2表示自定义下载路径;
·browser.download.manager.showWhenStarting:在开始下载时是否显示下载管理器;
·browser.helperApps.neverAsk.saveToDisk:对所给出的文件类型不再弹出询问框进行询问。
Firefox需要针对每种文件类型进行设置,这里需要查询对应文件的MIME类型,由于下载的是Python的最新版本,下载的文件类型为exe,因此类型为application/octet- stream。
通过Firefox浏览器实现下载文件的代码如下:
from selenium import webdriver
import time
profile = webdriver.FirefoxProfile()
# 设置成 2 表示自定义下载路径;设置成 0 表示下载到桌面;设置成 1 表示下载到默认路径
profile.set_preference("browser.download.folderList", 2)
# 在开始下载时是否显示下载管理器
profile.set_preference("browser.download.manager.showWhenStarting", False)
# 设置默认的保存文件夹
profile.set_preference("browser.download.dir", r"D:\Demo")
# 设置自动保存的文件类型,如果Firefox不能自动保存,一定是文件类型不对# 对所给出的文件类型不再弹出询问框进行询问
profile.set_preference("browser.helperApps.neverAsk.saveToDisk", 'application/octet-stream')
driver = webdriver.Firefox(Firefox_profile=profile)
driver.implicitly_wait(10)
# 访问Python下载页,下载最新版本的Python
driver.get('https://www.python.org/downloads/')
driver.maximize_window()
time.sleep(2)
# 单击Download the latest version for Windows按钮
driver.find_element_by_xpath('//*[@id="touchnav-wrapper"]/header/div/div[2]/div/div[3]/p/a').click()
2.Chrome浏览器
通过Chrome浏览器实现文件下载时也需要做些设置,Options设置如下。
·download.default_directory:设置下载路径;
·profile.default_content_settings.popups:设置为0表示禁止弹出窗口。
通过Chrome浏览器实现下载文件的代码如下:
from seleniumimport webdriver
import time
options = webdriver.ChromeOptions()
prefs = {
"download.prompt_for_download":False,
'download.default_directory':'D:\\Demo',#设置下载路径
"plugins.always_open_pdf_externally":True,
'profile.default_content_settings.popups':0,#设置为0,表示禁止弹出窗口
}
options.add_experimental_option('prefs',prefs)
driver=webdriver.Chrome(chrome_options=options)
driver.get('https://www.python.org/downloads/')
driver.maximize_window()
time.sleep(20)
#点击下载python按钮
driver.find_element_by_xpath('//*[@id="touchnav-wrapper"]/header/div/div[2]/div/div[3]/p/a').click()