zoukankan      html  css  js  c++  java
  • selenium键盘操作,执行JS,上传文件

    键盘操作

    导包

    from selenium.webdriver.common.keys import Keys

    对应属性以及调用

    Keys.BACK_SPACE:回退键(BackSpace)
    Keys.TAB:制表键(Tab)
    Keys.ENTER:回车键(Enter)
    Keys.SHIFT:大小写转换键(Shift)
    Keys.CONTROL:Control键(Ctrl)
    Keys.ALT:ALT键(Alt)
    Keys.ESCAPE:返回键(Esc)
    Keys.SPACE:空格键(Space)
    Keys.PAGE_UP:翻页键上(Page Up)
    Keys.PAGE_DOWN:翻页键下(Page Down)
    Keys.END:行尾键(End)
    Keys.HOME:行首键(Home)
    Keys.LEFT:方向键左(Left)
    Keys.UP:方向键上(Up)
    Keys.RIGHT:方向键右(Right)
    Keys.DOWN:方向键下(Down)
    Keys.INSERT:插入键(Insert)
    DELETE:删除键(Delete)
    NUMPAD0 ~ NUMPAD9:数字键1-9
    F1 ~ F12:F1 - F12键
    (Keys.CONTROL, ‘a’):组合键Control+a,全选
    (Keys.CONTROL, ‘c’):组合键Control+c,复制
    (Keys.CONTROL, ‘x’):组合键Control+x,剪切
    (Keys.CONTROL, ‘v’):组合键Control+v,粘贴

    实例操作

    import time
    from selenium.webdriver.common.keys import Keys
    from selenium import webdriver
    
    driver = webdriver.Chrome()
    
    driver.get('https://www.baidu.com')
    
    input_ele = driver.find_element_by_id('kw')
    # 输入柠檬班
    input_ele.send_keys('addicated')
    
    # 输入回车键
    input_ele.send_keys(Keys.ENTER)
    
    #按F12
    input_ele.send_keys(Keys.F12)
    
    #全选
    input_ele.send_keys(Keys.CONTROL, 'a')
    
    # 复制
    input_ele.send_keys(Keys.CONTROL, 'c')
    
    # 粘贴
    input_ele.send_keys(Keys.CONTROL, 'v')
    input_ele.send_keys(Keys.CONTROL, 'v')

    执行JS代码

    selenium内置了执行js代码的api。

    在web自动化中主要使用js来进行2个方面的操作

    1,通过js代码修改元素的属性,例如一些只读的input框之类

    # ----------------------------通过js代码修改元素的属性--------------------
    from_ele = driver.find_element_by_id("fromStationText")
    to_ele = driver.find_element_by_id('toStationText')
    time.sleep(3)
    # js代码
    js =
    """
    var fro_ele = arguments[0];
    var to_ele = arguments[1];
    fro_ele.value = '上海';
    to_ele.value = '太原';
    return '操作完了';
    """
    # js 内为js代码块,进行变量属性复制,arguments是形参,在调用的时候顺序传参进去
    # 执行js代码
    res = driver.execute_script(js,from_ele,to_ele)
    print('js代码执行之后的返回值:',res)

    2,通过js来定位元素,例如一些定位困难的元素

    # -----------------------通过js来定位元素-------------------------------------
    js = """
    var forEle =  document.getElementById('fromStationText');
    return forEle;
    """
    res = driver.execute_script(js)
    time.sleep(3)
    res.send_keys('长沙')
    print(res)

    理解arguments

    # -----------------------理解arguments---------------------------
    arguments:execute_script方法中传进入的参数,除了js代码,都会保存在arguments中
    js = """
    console.log(arguments)
    """
    driver.execute_script(js,9999,111,222,333,44,555)

    通过执行JS完成的操作

    sendKeys

    driver.get('https://www.baidu.com')
    
    input_ele = driver.find_element_by_id('kw')
    
    #  js代码
    js = "document.getElementById('kw').value = 'addicated'"
    # 执行js代码
    driver.execute_script(js)

    修改元素属性,如只读

    driver.get('https://www.12306.cn/index/')
    
    date_ele = driver.find_element_by_id("train_date")
    
    time.sleep(3)
    #  js代码
    js = """
    var date_ele = arguments[0];
    date_ele.readOnly=false;
    date_ele.value ='2020-06-09'; 
    """
    # 执行js代码
    driver.execute_script(js, date_ele)

    js代码操作,滑动页面

    driver = webdriver.Chrome()
    
    driver.get('https://www.xfz.cn')
    
    date_ele = driver.find_element_by_xpath('//div[@class="more-news"]')
    
    # 滑动窗口到元素可见位置,返回当前元素在页面的坐标位置
    res = date_ele.location_once_scrolled_into_view
    print(res)
    window.scrollTo:滑动到相对于坐标原点的位置
    
    window.scrollBy:相对于当前位置进行滑动
    
    document.body.scrollHeight:获取当前窗口的可滑动的最大高度

    js代码打开新窗口

    js = "window.open('https://www.baidu.com')"
    
    driver.execute_script(js)

    上传文件操作

    上传文件

    一种是通过js上传,

    一种是input框

    指的是页面上的上传文件入口api,input框类型,以及,点击按钮出发绑定的js代码进行文件上传的两种方式。

    input上传

    driver.find_element_by_xpath('//div[button[@id="test1"]]/input')
    .send_keys('C:课件images9.png')

    简单粗暴的sendkeys即可。

    JS上传

    1,pywinauto

    缺点 : 只能在windows上使用

    优点:可以选择多个文件,路径中允许中文

    实例:

    # ------------pywinauto  通过窗口上传单个文件----------------------
    from pywinauto.keyboard import send_keys
    #定位文件上传按钮:
    driver.find_element_by_id('test1').click()
    
    time.sleep(2)
    # 输入文件名
    send_keys('C:课件images9.png')
    # 输入回车键
    send_keys('{VK_RETURN}')
    # -----------------上传多个文件时
    time.sleep(2)
    # 输入文件名
    send_keys('"C:课件images9.png"')
    send_keys('"C:课件images8.png"')
    send_keys('"C:课件images9.png"')
    # 输入回车键
    send_keys('{VK_RETURN}')

    2,pyaugoui

    缺点:只能选择一个文件,文件路径不允许中文

    优点:跨平台,linux,max,windows都可以受用

    实例:

    import pyautogui
    driver.find_element_by_id('test1').click()
    time.sleep(2)
    pyautogui.write('C:projectpy27_classpy27_webgoogle.png')
    pyautogui.press('enter', 2)
  • 相关阅读:
    实现在Android本地视频播放器开发
    敏捷开发的4个中心思想
    PHP如何大幅度提升运行效率? 把它编译成机器码!
    卸载Oracle数据库(有图有真相)
    宁波理工邀请赛 c zoj3185解题报告
    FRG图像文件格式的压缩质量
    另类的文件夹加密(批处理实现)
    代码详查中的自尊心
    [C# 网络编程系列]专题十:实现简单的邮件收发器
    php中获得客户端,服务器ip
  • 原文地址:https://www.cnblogs.com/addicated/p/13194364.html
Copyright © 2011-2022 走看看