• python 行为事件(ActionChains)源码详解


    参考

    ActionChains简介

    actionchains是selenium里面专门处理鼠标相关的操作如:鼠标移动,鼠标按钮操作,按键和上下文菜单(鼠标右键)交互。这对于做更复杂的动作非常有用,比如悬停和拖放。actionchains也可以和快捷键结合起来使用,如ctrl,shif,alt结合鼠标一起使用

    当你使用actionchains对象方法,行为事件是存储在actionchains对象队列。当你使用perform(),事件按顺序执行。

    方法一:可以写一长串
    menu = driver.find_element_by_css_selector(".nav")
    hidden_submenu = driver.find_element_by_css_selector(".nav #submenu1")
    
    ActionChains(driver).move_to_element(menu).click(hidden_submenu).perform()
    
    方法二:可以分几步写
    menu = driver.find_element_by_css_selector(".nav")
    hidden_submenu = driver.find_element_by_css_selector(".nav #submenu1")
    
    actions = ActionChains(driver)
    actions.move_to_element(menu)
    actions.click(hidden_submenu)
    actions.perform()
    

    方法介绍

    1.以下提到的Keys类,是selenium里面的键盘事件类,导入方法:

    from selenium.webdriver.common.keys import Keys
    

    2.鼠标事件使用导入方法:

    from selenium.webdriver.common.action_chains import ActionChains
    
    示例

    第一组动作,在火狐首页,打开新浪新闻

    <li class="site-multiple site-dropdown" sid="10">
      <a class="dropdown-menu" href="http://www.sina.com.cn/" title="新 浪" style="45px">新 浪</a>
      <div class="site-dropmenu" style="display: block;">
        <a class="site-sub first" href="http://news.sina.com.cn/" title="新浪新闻">新浪新闻</a>
        <a class="site-sub " href="http://sports.sina.com.cn/" title="新浪体育">新浪体育</a>
        <a class="site-sub " href="http://finance.sina.com.cn/" title="新浪财经">新浪财经</a>
        <a class="site-sub " href="http://mil.news.sina.com.cn/" title="新浪军事">新浪军事</a>
      </div>
    </li>
    

    WechatIMG430.png
    第二组操作,在搜索栏搜索“鹿晗”,点击搜索

    <!-- 搜索框 -->
    <input class="cheadSeaKey" name="q" value="请输入关键词" onfocus="if(this.value=='请输入关键词'){this.value='';}" onblur="if(this.value==''){this.value='请输入关键词';}" autocomplete="off" type="text"/>
    
    <!-- 搜索按键 -->
    <input class="cheadSeaSmt" value="搜索" type="submit"/>
    

    WechatIMG431.png

    全部代码

    ActionChains1
    
    import time
    from selenium.webdriver.common.action_chains import ActionChains
    from selenium import webdriver
    
    driver=webdriver.Firefox()
    driver.get("http://e.firefoxchina.cn/")
    time.sleep(3)
    print("打开网页成功")
    
    #定位
    sina=driver.find_element_by_css_selector("a[title='新 浪']")
    news=driver.find_element_by_css_selector("a[title='新浪新闻']")
    
    #定义动作
    actions=ActionChains(driver)
    actions.move_to_element(sina).click(news).perform()
    actions.perform()
    
    #切换窗口
    driver.switch_to_window(driver.window_handles[-1])
    print(driver.title)
    
    #第二组动作
    actions=ActionChains(driver)
    keys=driver.find_element_by_css_selector("input[value='请输入关键词']")
    search=driver.find_element_by_css_selector("input[value='搜索']")
    keys.click()
    actions.send_keys(u"鹿晗")
    actions.click(search).perform()
    
  • 相关阅读:
    (转)用stunnel给普通http通信加密
    (原)logstash-forwarder + logstash + elasticsearch + kibana
    nsq初探
    (转)go语言nsq源码解读二 nsqlookupd、nsqd与nsqadmin
    (转)Linux下的输入/输出重定向
    (转) Lua: 给 Redis 用户的入门指导
    Android ——多线程处理之多线程用法大集合(转)
    Android——线程通讯类Handler(转)
    Android—— 线程 thread 两种实现方法!(转)
    Android-——多线程之Handler(转)
  • 原文地址:https://www.cnblogs.com/wzbk/p/14119374.html
Copyright © 2020-2023  润新知