• Selenium2+python自动化75-非input文件上传(SendKeys)【转载】


    转至博客:上海-悠悠

    前言

    不少小伙伴问非input标签如何上传文档,这个本身就是一坑,无奈很多小伙伴非要跳坑里去,那就介绍一个非主流的上传文件方法吧,用第三方库SendKeys.

     (本篇基于python2.7版本的,python3的安装SendKeys包自己想办法吧)

    一、SendKeys安装

    1.pip安装SendKeys

    >pip install SendKeys

    2.在安装的时候如果你出现上面保存,先别急着截图贴群求大神,上面已经告诉解决办法了:Get it from http://aka.ms/vcpython27

    3.按上面给的地址下载文件,一路傻瓜式安装就行

    4.出现如下界面,说明安装成功了

    二、参考代码

    1.以下代码在Chrom浏览器上是运行通过的,要先登录博客园记住密码,然后加载配置免登录

    2.chrome加载配置方法,只需改下面一个地方,username改成你电脑的名字(别用中文!!!)

    '--user-data-dir=C:UsersusernameAppDataLocalGoogleChromeUser Data'

    3.后面两次回车,是因为搜狗输入法,第一个回车是确认输入,第二个是确定选中的文件

    # coding:utf-8
    from selenium import webdriver
    import SendKeys
    import time

    # 加载Firefox配置
    # profileDir = r'C:UsersxxxAppDataRoamingMozillaFirefoxProfiles1x41j9of.default'
    # profile = webdriver.FirefoxProfile(profileDir)
    # driver = webdriver.Firefox(profile)

    # 加载Chrome配置
    option = webdriver.ChromeOptions()
    option.add_argument('--user-data-dir=C:UsersxxxAppDataLocalGoogleChromeUser Data')
    driver = webdriver.Chrome(chrome_options=option)

    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)

    # 文件路径
    time.sleep(2)
    driver.find_element_by_class_name("qq-upload-button").click()
    # driver.find_element_by_name("file").click()
    time.sleep(5)

    # SendKeys方法输入内容
    SendKeys.SendKeys("D:\test\jie1\blog\12.png")  # 发送文件地址
    time.sleep(1)
    SendKeys.SendKeys("{ENTER}")   # 发送回车键
    time.sleep(1)
    SendKeys.SendKeys("{ENTER}")    # 因为我的电脑是搜索输入法,所以多看一次回车
    # driver.quit()

    (备注:这里Firefox上运行有个坑,第二次回车失效了,这个暂时没想到好的解决办法)

  • 相关阅读:
    vi/vim系统编辑命令使用技巧
    C++基础之智能指针
    C++基础之volatile关键字
    C++基础之强制类型转换
    C++基础之左值、右值与移动语义
    C++基础之对象模型
    C++基础之运行时类型识别RTTI
    C++基础之指针与引用的底层实现
    深度学习之参数计算(CNN为例)
    数学基础之勾股数
  • 原文地址:https://www.cnblogs.com/caoj/p/7815804.html
Copyright © 2020-2023  润新知