zoukankan      html  css  js  c++  java
  • selenium 上传文件方法补充——SendKeys、win32gui

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

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

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

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

    最方便的——SendKeys

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

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

    # coding: utf-8

    from selenium import webdriver
    from time import sleep
    import 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:UsersDELLDesktopvid.mp4') sleep(2) SendKeys.SendKeys("{ENTER}")
                 

    第二种方法:win32gui

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

    要安装

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

    2、pypiwin32

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

    # coding: utf-8

    import win32gui
    import win32api
    import win32con
    from selenium import webdriver
    from 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:UsersDELLDesktopvid.mp4') sleep(2) win32gui.SendMessage(dialog, win32con.WM_COMMAND, 1, button)
                 

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

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

  • 相关阅读:
    sql in not in 案例用 exists not exists 代替
    根据算法规则进行匹配相似车辆
    随机生成临时车牌号
    无法加载 DLL“ParkCOM.dll”: 找不到指定的模块。 (异常来自 HRESULT:0x8007007E) 终结者
    c# 除掉前三个字符,剩下的4个字符全为数字方为特殊车辆
    UI设计文本框解决Placeholder的在IE10 以下 IE 9 IE8 IE 7 的兼容问题
    EF框架 对字段属性为NULL的空值处理 类型前面加上?保证EF列表读取显示数据不会报异常
    boost::property_tree读取解析.xml文件
    C++ URLencode library
    http与中文编码传输
  • 原文地址:https://www.cnblogs.com/captainmeng/p/8387247.html
Copyright © 2011-2022 走看看