selenium 上传文件方法补充——SendKeys、win32gui

之前和大家说了input标签的上传文件的方式:

《selenium2 python 自动化测试实战》(13)——上传文件

现在好多网站上传的标签并不是input,而是div之类的比如:

全部都是div标签,这时候用上面的方法就不好用了。今天船长在大神的帮助下学会了两种方法,现在船长来教大家上传div这种标签的方式。

最方便的——SendKeys

大家只需要pip install SendKeys库,然后再代码里直接用就OK了,这里用大鱼号上传视频作为例子上代码:

注意,浏览器用的是火狐,因为chrome浏览器会不支持哦~

# coding: utf-8

from selenium import webdriverfrom time import sleepimport SendKeys

# options = webdriver.ChromeOptions()# options.add_argument(‘disable-infobars‘)# d = webdriver.Chrome(chrome_options=options)d = webdriver.Firefox()
d.get("https://mp.dayu.com")# cookie登录,跳过验证码d.add_cookie({‘name‘: ‘cna‘,              ‘value‘: ‘fhSvgLVKF3Gz1‘,              ‘domain‘: ‘.dayu.com‘})
d.add_cookie({‘name‘: ‘isg‘,              ‘value‘: ‘BIaGbW7sWwBT6-_W8K5‘,              ‘domain‘: ‘.dayu.com‘})
d.add_cookie({‘domain‘: ‘mp.dayu.com‘,              ‘name‘: ‘USER_TMP‘,              ‘value‘: ‘tuAaJfSa8AaxABk‘})
sleep(3)
d.refresh()
sleep(2)
d.find_element_by_xpath("/html/body/div/div/div[1]/ul/li[2]/ul/li[2]/a/span").click()
sleep(5)
d.find_element_by_xpath(‘/html/body/div[1]/div[3]/div/div[2]/div/div/div/div/div[2]/div[1]/div[1]‘).click()
SendKeys.SendKeys(r‘C:\Users\DELL\Desktop\vid.mp4‘)
sleep(2)
SendKeys.SendKeys("{ENTER}")              

第二种方法:win32gui

这种方法有点麻烦,而且下载库的时候非常麻烦……

要安装

1、pywin32-218.win-amd64-py2.7.exe

2、pypiwin32

下载好这两个库以后,就可以上代码啦:

# coding: utf-8

import win32guiimport win32apiimport win32confrom selenium import webdriverfrom time import sleep

# options = webdriver.ChromeOptions()# options.add_argument(‘disable-infobars‘)# d = webdriver.Chrome(chrome_options=options)

d = webdriver.Firefox()
d.get("https://mp.dayu.com")
d.add_cookie({‘name‘: ‘cna‘,              ‘value‘: ‘fhW6ElaKVKF3Gz1‘,              ‘domain‘: ‘.dayu.com‘})
d.add_cookie({‘name‘: ‘isg‘,              ‘value‘: ‘BIaGbW7sIPskIv6-_W8K5‘,              ‘domain‘: ‘.dayu.com‘})
d.add_cookie({‘domain‘: ‘mp.dayu.com‘,              ‘name‘: ‘USER_TMP‘,              ‘value‘: ‘tuAaJfSaWoKiQutU9mIkyBk‘})
sleep(3)
d.refresh()
sleep(2)
d.find_element_by_xpath("/html/body/div/div/div[1]/ul/li[2]/ul/li[2]/a/span").click()
sleep(5)
d.find_element_by_xpath(‘/html/body/div[1]/div[3]/div/div[2]/div/div/div/div/div[2]/div[1]/div[1]‘).click()
dialog = win32gui.FindWindow(‘#32770‘, u‘文件上传‘)
ComboBoxEx = win32gui.FindWindowEx(dialog, 0, ‘ComboBoxEx32‘, None)
ComboBox = win32gui.FindWindowEx(ComboBoxEx, 0, ‘ComboBox‘, None)
Edit = win32gui.FindWindowEx(ComboBox, 0, ‘Edit‘, None)
button = win32gui.FindWindowEx(dialog, 0, ‘Button‘, None)
sleep(2)
win32gui.SendMessage(Edit, win32con.WM_SETTEXT, 0, r‘C:\Users\DELL\Desktop\vid.mp4‘)
sleep(2)
win32gui.SendMessage(dialog, win32con.WM_COMMAND, 1, button)              

船长亲测可用,大家也试一下~~

微信公众号搜索“自动化测试实战”或扫描下方二维码添加关注~~~

原文地址:https://www.cnblogs.com/captainmeng/p/8387247.html

时间: 2024-11-04 02:30:48

selenium 上传文件方法补充——SendKeys、win32gui的相关文章

Selenium上传文件方法总结

Web上本地上传图片,弹出的框Selenium是无法识别的,也就是说,selenium本身没有直接的方法去实现上传本地文件,这里总结了两种上传文件的方式. 一.利用Robot类处理文件上传. 其大致流程可以为: 1. 利用selenium点击web上本地文件的上传按钮: 2. 在弹出的弹框中,文件路径输入框默认的是光标的聚焦,将文件在磁盘上的路径通过拷贝和黏贴的方法写上去. 3. 通过按下回车,默认触发弹框的确定按钮,完成文件上传的功能. 这里以百度首页的利用图片搜索为例: 打开百度首页,搜索按

iOS 网络请求 NSURLSession 的上传文件方法

NSURLSession/NSURLConnection的上传文件方法 此篇文章的理论基础主要是与HTTP网络通信协议相关.为集中精力,可以先把TCP/IP协议这些置之不理,也就是先只关注HTTP的请求和响应的结构.HTTP完整的原理内容就此略过.在此只略提相关内容.文中涉及的设计源码可以通过这里获取 https://github.com/wuqingjian2015/uploadHelper,有意者可以去看看. HTTP是干什么用的呢? 先考虑一下以下应用过程: 从客户端向服务器端发起一个请求

python +selenium上传文件

python +selenium上传文件 分为2部分 1.是input标签 driver.find_element_by_name("upload").send_keys('C:\\test.txt') 2.非input标签 https://blog.csdn.net/weixin_42024694/article/details/80080629 原文地址:https://www.cnblogs.com/ljf520hj/p/12181098.html

Selenium 上传文件失败,解决办法一

昨个改程序遇到一个问题,UI上面有需要上传文件的地方.但是我不知道怎么让Selenium完成 点击上传文件按钮->在弹出的文件选择窗口中选择路径和文件,点确定. 要知道弹出窗口属于window的范畴,Selenium只能处理Web page. Jeremy原先的代码用的是Selenium RC中的 type “filepath+filename”方法.可不知咋搞的反正运行到这里是进行不下去了. 正好借这个机会来研究一下在Webdriver里怎么做. 我自己写了个网页,里面就一句 我先是用Sele

ssh连接服务器以及scp上传文件方法

本地控制台输入 ssh [email protected]外网ip或内网ip,举例:ssh [email protected]      这是用用户名为root的用户登录192.168.133.196这个地址所在的后台.如果提示以下红色部分错误: @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!     @ @@@@@@

springmvc上传文件方法及注意事项

本文基于注解的配置,敬请留意  基于注解整合 一.springmvc为我们提供两种上传方式配置: 1)org.springframework.web.multipart.commons.CommonsMultipartResolver (基于commons-fileupload.jar) 2) org.springframework.web.multipart.support.StandardServletMultipartResolver (基于servlet3.0+) 二.配置方式基于com

.net ftp上传文件方法

using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.Web.UI;using System.Web.UI.WebControls;using System.IO;using System.Net;using System.Text;using System.Configuration; namespace DlnOffice.general.netdisk{ p

selenium 上传文件

#-*-coding:utf-8-*-from selenium import webdriverfrom time import sleep #前提条件,需要提前登录账户,获取配置文件才能打开随笔的编辑页面#火狐找到配置文件路径:帮助>故障排除信息>配置文件夹>显示文件夹#应用场景,主要是做免登录操作profileDir = "C:\Users\Administrator\AppData\Roaming\Mozilla\Firefox\Profiles\yn80ouvt.de

C# 模拟Form表单上传文件方法

public static string UploadFile(string url, HttpPostedFileBase file,string FieldName) { Stream fs = file.InputStream; if (!fs.CanRead) { return ""; } byte[] buffer = new byte[fs.Length]; fs.Read(buffer, 0, (int)fs.Length); fs.Close(); string bou