zoukankan      html  css  js  c++  java
  • (转)python selenium-webdriver 元素操作之鼠标和键盘事件

    参考资料:https://blog.csdn.net/zh175578809/article/details/76767748

    参考资料2:https://blog.csdn.net/qq_41817302/article/details/79618654

      selenium 提供了比较完整的键盘操作,在使用的模拟键盘操作之前需要我们导入from selenium.webdriver.common.keys import Keys即可,然后就可以来模拟键盘操作。

    #导入Keys 模块,然后我们看看Keys 模块定义了那些按键
    from selenium.webdriver.common.keys import Keys

    一、键盘的操作

    导入模块以后,我们可以看看具体的定义按键内容,我已经把经常使用的按键注释标记。

    复制代码
        NULL = 'ue000'
        CANCEL = 'ue001'  # ^break
        HELP = 'ue002'
        BACKSPACE = 'ue003'
        BACK_SPACE = BACKSPACE   #删除键
        TAB = 'ue004'   #TAB键
        CLEAR = 'ue005'  
        RETURN = 'ue006'
        ENTER = 'ue007'   #回车键
        SHIFT = 'ue008'   #Shift键
        LEFT_SHIFT = SHIFT
        CONTROL = 'ue009'
        LEFT_CONTROL = CONTROL   #Ctrl 键
        ALT = 'ue00a'           #Alt 键
        LEFT_ALT = ALT
        PAUSE = 'ue00b'
        ESCAPE = 'ue00c'   #ECS键
        SPACE = 'ue00d'    #空格键 
        PAGE_UP = 'ue00e'   #PgUp 键
        PAGE_DOWN = 'ue00f' #PgDwon 键
        END = 'ue010'    #END 键
        HOME = 'ue011'   #HOME 键
        LEFT = 'ue012'  #左键
        ARROW_LEFT = LEFT  
        UP = 'ue013'    #上键
        ARROW_UP = UP   
        RIGHT = 'ue014'
        ARROW_RIGHT = RIGHT  #右键
        DOWN = 'ue015'      #下键
        ARROW_DOWN = DOWN  
        INSERT = 'ue016'    #insert键 
        DELETE = 'ue017'    #del键
    
        SEMICOLON = 'ue018'  #';'键
        EQUALS = 'ue019'     #'='键
      #数字键盘
        NUMPAD0 = 'ue01a'  # number pad keys
        NUMPAD1 = 'ue01b'
        NUMPAD2 = 'ue01c'
        NUMPAD3 = 'ue01d'
        NUMPAD4 = 'ue01e'
        NUMPAD5 = 'ue01f'
        NUMPAD6 = 'ue020'
        NUMPAD7 = 'ue021'
        NUMPAD8 = 'ue022'
        NUMPAD9 = 'ue023'
        MULTIPLY = 'ue024' # '*' 键
        ADD = 'ue025'   # '+' 键
        SEPARATOR = 'ue026'  #','键
        SUBTRACT = 'ue027'  # '-' 键
        DECIMAL = 'ue028'   # '.'键
        DIVIDE = 'ue029'    #'/'键
    
        F1 = 'ue031'  # function  keys
        F2 = 'ue032'
        F3 = 'ue033'
        F4 = 'ue034'
        F5 = 'ue035'
        F6 = 'ue036'
        F7 = 'ue037'
        F8 = 'ue038'
        F9 = 'ue039'
        F10 = 'ue03a'
        F11 = 'ue03b'
        F12 = 'ue03c'
    
        META = 'ue03d'
        COMMAND = 'ue03d'
    复制代码

    看到模块中包含了很多的按键但是真正实际使用的按键不多,所以我下面对按键的操作将一些方法介绍一下,就不会对所有的按键详细介绍。

    1.首先我们了解下组合键,什么是组合键,比如我们经常使用的Ctrl + A ,Ctrl + C 等都是组合键。我们先看个例子

    在使用按键操作的时候我们需要借助一下send_keys()来模拟操作,Keys.CONTROL 也就是我们键盘上的Ctrl键,下面是几个常用的组合键。

    send_keys(Keys.CONTROL,'a')   #全选(Ctrl+A)

    send_keys(Keys.CONTROL,'c')   #复制(Ctrl+C)

    send_keys(Keys.CONTROL,'x')   #剪切(Ctrl+X)

    send_keys(Keys.CONTROL,'v')   #粘贴(Ctrl+V)

    我们下面使用Ctrl + A 来编写一个实例,看一下组合键的使用。

    复制代码
    #-*- coding:utf-8 -*-
    from selenium.webdriver.common.keys import Keys
    from selenium import webdriver
    import time
    driver = webdriver.Chrome()
    driver.get("http://www.baidu.com")
    driver.find_element_by_id('kw').send_keys('AAAAAAAAAAAA')
    driver.find_element_by_id("kw").send_keys(Keys.CONTROL,'a')  #注意这里组合键的输入。
    time.sleep(10)
    driver.quit()
    复制代码

    2.下面常用的键,这些常用键主要是非组合键,直接输入即可。

    • 回车键 Keys.ENTER
    • 删除键 Keys.BACK_SPACE
    • 空格键 Keys.SPACE
    • 制表键 Keys.TAB
    • 回退键 Keys.ESCAPE
    • 刷新键 Keys.F5

    下面我们选择一个常用的键,来编写一个例子,使用回车键来代替鼠标的click()键

    复制代码
    #-*- coding:utf-8 -*-
    from selenium.webdriver.common.keys import Keys
    from selenium import webdriver
    import time
    driver = webdriver.Chrome()
    driver.maximize_window()
    driver.get("http://cn.bing.com/")
    driver.find_element_by_id('sb_form_q').send_keys('selenium')
    driver.find_element_by_id("sb_form_go").send_keys(Keys.ENTER)   #通过回车键来代替鼠标的左键
    driver.quit()
    复制代码

    二、鼠标的操作

    这里有非常详尽的说明:http://www.cnblogs.com/mengyu/p/6901489.html

    详解:https://blog.csdn.net/zb455405775/article/details/80675718

    详解2:https://www.cnblogs.com/yoyoketang/p/8711367.html

    selenium 模拟按键F12实操:https://blog.csdn.net/xie_0723/article/details/51456266

      前面的例子中,点击事件都是通过click()方法实现鼠标的点击事件。其实在WebDriver中,提供了许多鼠标操作的方法,这些操作方法都封装在ActionChains类中,包括鼠标右击、双击、悬停和鼠标拖动等功能。

    ActionChains类提供的鼠标操作事件

    context_click():点击鼠标右键

    double_click():双击鼠标

    drag_and_drop():拖动鼠标

    move_to_element():鼠标悬停

    鼠标悬停

    页面上有些下拉菜单,在鼠标放到元素上以后,下面的菜单才会显示出来。下面的图片就是一个例子

    百度首页上的设置项,下面的菜单默认不会显示,将鼠标停在上面后才会显示,这就是鼠标的悬停操作,菜单显示以后就可以对下面的项进行点击操作

    进入搜索设置的代码

    # -*- coding: utf-8 -*-

    from selenium import webdriver
    import time

    driver = webdriver.Chrome()
    driver.get("http://www.baidu.com")
    time.sleep(3)

    settings = driver.find_element_by_link_text('设置')
    webdriver.ActionChains(driver).move_to_element(settings).perform()

    time.sleep(1)

    settings_search = driver.find_element_by_class_name('setpref')
    settings_search.click()

    time.sleep(3)
    driver.close()

    打开页面后,根据链接的文本信息找到设置项,使用ActionChains的move_to_element()方法将鼠标悬停在设置上,然后找到搜索设置项

    鼠标的右击、双击和拖动事件都是通过上述的方法调用,只要将方法替换一下就可以了。拖动事件需要传入两个参数,第一个参数是拖动的起点元素,第二个参数是终点元素

    webdriver.ActionChains(driver).context_click("右击的元素定位").perform() #右击事件
    webdriver.ActionChains(driver).double_click("双击的元素定位").perform() #双击事件
    webdriver.ActionChains(driver).drag_and_drop("拖动的起点元素", "拖动的终点元素").perform() #拖动事件

    Actionchains方法列表

    click(on_element=None) ——单击鼠标左键

    click_and_hold(on_element=None) ——点击鼠标左键,不松开

    context_click(on_element=None) ——点击鼠标右键

    double_click(on_element=None) ——双击鼠标左键

    drag_and_drop(source, target) ——拖拽到某个元素然后松开

    drag_and_drop_by_offset(source, xoffset, yoffset) ——拖拽到某个坐标然后松开

    key_down(value, element=None) ——按下某个键盘上的键

    key_up(value, element=None) ——松开某个键

    move_by_offset(xoffset, yoffset) ——鼠标从当前位置移动到某个坐标

    move_to_element(to_element) ——鼠标移动到某个元素

    move_to_element_with_offset(to_element, xoffset, yoffset) ——移动到距某个元素(左上角坐标)多少距离的位置

    perform() ——执行链中的所有动作

    release(on_element=None) ——在某个元素位置松开鼠标左键

    send_keys(*keys_to_send) ——发送某个键到当前焦点的元素

    send_keys_to_element(element, *keys_to_send) ——发送某个键到指定元素

  • 相关阅读:
    【leetcode】字符串轮转
    【leetcode】URL化
    【leetcode】学生出勤记录 I
    【leetcode】子域名访问计数
    【leetcode】整数的各位积和之差
    【leetcode】另一个树的子树
    【leetcode】查询后的偶数和
    【leetcode】左叶子之和
    【leetcode】从根到叶的二进制数之和
    【leetcode】平方数之和
  • 原文地址:https://www.cnblogs.com/chun-xiaolin001/p/10201211.html
Copyright © 2011-2022 走看看