• Selenium2+python自动化33-文件上传(send_keys)【转载】


    前言

    文件上传是web页面上很常见的一个功能,自动化成功中操作起来却不是那么简单。

    一般分两个场景:一种是input标签,这种可以用selenium提供的send_keys()方法轻松解决;

    另外一种非input标签实现起来比较困难,可以借助autoit工具或者SendKeys第三方库。

    本篇以博客园的上传图片为案例,通过send_keys()方法解决文件上传问题

    一、识别上传按钮

    1.点开博客园编辑器里的图片上传按钮,弹出”上传本地图片”框。

    2.用firebug查看按钮属性,这种上传图片按钮有个很明显的标识,它是一个input标签,并且type属性的值为file。

    只要找到这两个标识,我们就可以直接用send_keys()方法上传文件了。

    二、定位iframe

    1.这里定位图片上传按钮情况有点复杂,首先它是在iframe上(不懂iframe的看这篇:Selenium2+python自动化14-iframe

    2.这个iframe的id是动态的,且没有name属性,其它属性也不是很明显

    3.通过搜索发现,这个页面上有两个iframe,需要定位的这个iframe是处于第二个位置

    4.可以通过标签定位所有的iframe标签,然后取对应的第几个就可以了。

    三、文件上传

    1.先定位到文件上传按钮,直接调用send_keys()方法就可以实现啦

    # coding:utf-8
    from selenium import webdriver
    import time
    profileDir = r'C:UsersGloriaAppDataRoamingMozillaFirefoxProfiles1x41j9of.default'
    profile = webdriver.FirefoxProfile(profileDir)
    driver = webdriver.Firefox(profile)
    driver.implicitly_wait(30)
    driver.get("http://www.cnblogs.com/yoyoketang/")
    driver.find_element_by_link_text("新随笔").click()
    time.sleep(3)
    # 点开编辑器图片
    driver.find_element_by_css_selector("img.mceIcon").click()
    time.sleep(3)
    # 定位所有iframe,取第二个
    iframe = driver.find_elements_by_tag_name('iframe')[1]
    # 切换到iframe上
    driver.switch_to_frame(iframe)

    # 文件路径
    driver.find_element_by_name('file').send_keys(r"D: estxuexi est14.png")

    非input标签的文件上传,就不适用于此方法了,需要借助autoit工具或者SendKeys第三方库。

  • 相关阅读:
    SqlServer卸载实例
    java写的各种钟(收集)
    Codeforces 1003D Coins and Queries 【性质】
    Codeforces 997B Roman Digits【暴力】【枚举】
    洛谷 P2679 子串 【dp神题】【滚动数组】【2015 noip d2t2】
    复习图论
    Codeforces 1000D Yet Another Problem On a Subsequence 【dp】【组合数学】
    Codeforces 1000C Covered Points Count 【前缀和优化】
    Codeforces 999F Cards and Joy 【dp】【性质】
    Codeforces 999D Equalize the Remainders 【模拟】
  • 原文地址:https://www.cnblogs.com/caoj/p/7813679.html
Copyright © 2020-2023  润新知