selenium自动化上传&下载
一、上传&下载文件
1、上传文件
常见的 web 页面的上传,一般使用
input
标签或是插件(JavaScript
、Ajax
),对于input
标签的上传,可以直接使用send_keys(路径)
来进行上传。from selenium import webdriver from selenium.webdriver.common.by import By from pathlib import Path import time # 设置chrome浏览器的选项(高版本selenium测试会自动闪退,想取消就要更改选项) option:选项 option = webdriver.ChromeOptions() # experimental:实验性的 option.add_experimental_option("detach", True) # 将设置好的option传参给chrome,这样就不会闪退了 driver = webdriver.Chrome(option) driver.get('http://127.0.0.1:8848/9/9-12.html') # 设置窗口最大化 driver.maximize_window() time.sleep(2) # 设置文件路径为当前目录下的html文件 file_path = Path(Path.cwd(), '9-12.html') # 'file:///':文件协议,表示打开本地文件,后面的是本地文件地址 driver.get('file:///' + str(file_path)) time.sleep(5) # 定位给到input元素,直接把文件传过去 driver.find_element(By.XPATH, "/html/body/input").send_keys(str(file_path)) time.sleep(5) # 退出 driver.quit()
2、下载文件
Chrome浏览器
download.default_directory
:设置下载路径。profile.default_content_settings.popups
:0 禁止弹出窗口。from selenium import webdriver from selenium.webdriver.common.by import By from pathlib import Path import time # 设置chrome浏览器的选项(高版本selenium测试会自动闪退,想取消就要更改选项) option:选项 option = webdriver.ChromeOptions() # experimental:实验性的 option.add_experimental_option("detach", True) # 将设置好的option传参给chrome,这样就不会闪退了 driver = webdriver.Chrome(option) # 设置窗口最大化 driver.maximize_window() time.sleep(2) """ [profile]:属性 [default]:默认的 [content]:内容 [popups]:弹出 [directory]:字典;目录 (root directory: 根目录) """ # 设置禁止弹窗并且下载在本地 prefs = {'profile.default_content_settings.popups': 0, 'download.default_directory': str(Path.cwd())} # 加入驱动器选项 option.add_experimental_option('prefs', prefs) driver = webdriver.Chrome(option) # 获取要下载图片的网址 driver.get("https://pic.sogou.com/d?query=%E5%83%8F%E7%B4%A0%E9%A3%8E%E9%A3%8E%E6%99%AF&forbidqc=&entityid=&preQuery=&rawQuery=&queryList=&st=&did=1") time.sleep(5) # 保存按钮XPATH位置://*[@id="foot"]/div[1]/div[2]/a driver.find_element(By.XPATH, "//div[1]/div[2]/a").click() time.sleep(5) print("下载成功") # 实际作用是当你弹出像下面的页面 “您的连接不是私密连接” 时, # 可以直接键盘输入 “thisisunsafe” 直接访问链接。 # 那么这个键盘输入字符串的操作就是之间讲到的 send_keys, # 但由于该标签页是新打开的,所以要通过 switch_to.window() # 将窗口切换到最新的标签页。 # driver.switch_to.window(driver.window_handles[-1]) # driver.find_element_by_xpath('./html').send_keys('thisisunsafe') # 退出 driver.quit()