首页 > 其他分享 >Selenium15--文件上传与下载

Selenium15--文件上传与下载

时间:2022-12-15 21:12:45浏览次数:78  
标签:浏览器 Selenium15 上传 driver element -- os find 下载

文件上传

文件上传,如果按照手工方式操作,需要操作windows对话框,selenium默认只能操作浏览器里的网页,不能对windows对话框操作

标准文件上传

selenium针对file类型的input标记封装了现成的文件上传操作

标准文件上传的浏览、选择文件或上传按钮是文件型按钮:

<input type='file' name='file_name'>

标准文件上传的"浏览"、"选择文件"或"上传"按钮是文件型按钮:

driver.find_element(By.NAME,'file').send_keys(r"D:\test.txt")

注意事项:

  • 文件路径支持绝对路径,不支持相对路径(.或..),需要采用os模块里的path相关函数

    filepath = os.path.join(os.path.dirname(os.getcwd(),"tmpe","test.txt"))
    driver.find_element(By.ID,'file').send_keys(filepath)
    
  • 语法说明

    os.path.join() 函数是用于拼接两个或更多的路径
    os.path.dirname() 函数返回参数的文件或文件夹所在的目录
    os.getcwd() 函数返回当前工作目录
    

"""
	打开ECshop前台登录页
	输入用户名vip、密码vip、点击 立即登录 等待5秒
	点击上方 用户中心 等待3秒
	点击左侧 我的留言 等待3秒
	输入主题 123
	输入留言内容 456
	选择文件: D:\temp\111.txt
	点击 提交
"""
import os.path
from selenium import webdriver
from time import sleep
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
driver = webdriver.Firefox() # 启动浏览器
driver.get('http://localhost/upload/user.php')
driver.find_element(By.NAME,'username').send_keys('vip') # 输入用户名 vip
driver.find_element(By.NAME,'password').send_keys('vip') # 输入密码   vip
driver.find_element(By.NAME,'submit').click()  # 点击 登录按钮
sleep(5)
driver.find_element(By.LINK_TEXT,'用户中心').click() # 点击 用户中心
sleep(3)
driver.find_element(By.PARTIAL_LINK_TEXT, ' 我的留言').click() # 点击 我的留言
driver.find_element(By.NAME,'msg_title').send_keys('123')
driver.find_element(By.NAME,'msg_content').send_keys('456')
filepath = os.path.join(os.path.dirname(os.getcwd()),'temp','111.txt')
driver.find_element(By.NAME,'message_img').send_keys(filepath)
driver.find_element(By.XPATH,"//input[@value='提 交']").click()
sleep(3)
driver.quit()

文件下载

  • 在日常的web操作中,经常会遇到文件下载操作,一般都是点击一个下载链接,然后自动下载到默认目录

  • Firefox浏览器下载配置
    关于火狐浏览器的参数,可以通过在Firefox浏览器地址栏中输入"about:config"查看,设置好配置信息后,在重新启动浏览器后,浏览器就会根据这些配置进行运行或操作。

  • Firefox下载相关配置参数

    # 设置Firefox的默认下载文件夹
    browser.download.folderList 0代表桌面,1是 我的下载,2是自定义
    
    # 下载文件存放目录
    browser.download.dir 如果browser.download.folderList=0,这里不需要设置参数
    
    # 是否显示开始
    browser.download.manager.showWhenStarting
    True 为显示开始,False为不显示开始
    
    # 对所给文件类型不再弹出框进行询问
    在下载文件时,浏览器可能会弹出对应的下载提示框。
    这个提示框是浏览器的,不能使用Selenium进行操作,所以可以通过该配置关闭提示。
    上面例子中表示:对于下载类型为二进制流的文件不需要弹出提示。
    常用的类型有:application/octet-stream, application/vnd.ms-excel, text/csv,
    application/zip,application/pdf,application/json,application/msword
    

Content-type(MIME)

Firefox启动配置

在调用WebDriver的Firefox()方法时设置信息会作为参数传递给浏览器。Firefox浏览器在启动、运行(下载)时就会根据这些设置信息进行操作:

配置对象 = webdriver.FirefoxProfile() # 获取配置对象
配置对象.set_preference(key,value) # 添加配置信息
webdriver.Firefox(firefox_profile=配置对象) # 以配置对象启动浏览器 

练习

https://pypi.org/project/selenium/3.141.0/#files下载selenium-3.141.0-py2.py3-none-any.whl文件到当前代码所在的路径里

标签:浏览器,Selenium15,上传,driver,element,--,os,find,下载
From: https://www.cnblogs.com/sean-test/p/16986025.html

相关文章

  • Spring的事务传播机制
    参考资料:https://zhuanlan.zhihu.com/p/148504094什么是事务的传播简单的理解就是多个事务方法相互调用时,事务如何在这些方法间传播。举个栗子,方法A是一个事务的方法,......
  • Post-GWAS: single-cell disease relevance score (scDRS) 分析
    1、scDRS的计算原理如下所示:图片来源:ZhangMJ,HouK,DeyKK,etal.Polygenicenrichmentdistinguishesdiseaseassociationsofindividualcellsinsingle-ce......
  • ORM执行原生SQL语句、双下划线数据查询、ORM外键字段的创建、外键字段的相关操作、ORM
    今日内容ORM执行SQL语句有时候ROM的操作效率可能偏低我们是可以自己编写sql的方式1: models.User.objects.raw('select*fromapp01_user;')方式2: fromdjango.d......
  • 初始Docker
    一、Docker概述1.1Docker的概念Docker是一个开源的应用容器引擎,基于go语言开发并遵循了apache2.0协议开源Docker是在Linux容器里运行应用的开源工具,是一种轻量级的“......
  • STL之空间配置器
    空间配置器allocator只是基层内存配置/释放行为的一层薄薄的包装,没有任何效率上的强化。一般而言,C++内存配置操作和释放操作如下:classFoo{...};Foo*pf=newFoo;......
  • 分智慧果 - 2021算法与数据结构实验题
    算法与数据结构实验题8.19分智慧果题目内容★实验任务老师准备把一筐智慧果分给班上的同学,第i个同学(从1开始编号)分到\(a_i\)个智慧果。Bonez(编号为1)是个自私的......
  • 小记如何进入数据库修改数据
    最近开发与后端进行联调,开发环境发现很多接口返回空数据,不太方便我看效果,然后让后端补充数据,他们又有点忙,所以只能靠自己,进入数据库。1.首先安装软件【dbeaver】安装地......
  • django 6 模型层数据查询
    今日内容详细目录今日内容详细ORM执行SQL语句神奇的双下划线查询ORM外键字段的创建外键字段数据的增删改查模型层之表结构搭建数据准备多表查询ORM跨表查询思路基于对象的......
  • [Typescript] @typescript-eslint/unbound-method
    Itisusefultoenable '@typescript-eslint/unbound-method':'error',becausethiskindoferrorisrelatedtothiskeyword,sometimeitishardtonoticedur......
  • python之路50 ORM执行SQL语句 操作多表查询 双下线方法
    ORM执行SQL语句有时候ORM的操作效率可能偏低我们是可以自己编写SQL的方式1:models.User.objects.raw('select*fromapp01_user;')方式2:fromdjango.dbim......