zoukankan      html  css  js  c++  java
  • 鼠标事件

    我们来看看ActionChains类都提供了哪些鼠标操作的方法:

    MethodDescription
    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) 鼠标左键单击不松开,移动到指定坐标后松开
    move_by_offset(xoffset, yoffset) 鼠标移动到某个坐标
    move_to_element(to_element) 鼠标移动到某个元素
    move_to_element_with_offset(to_element, xoffset, yoffset) 鼠标移动到距离某个元素的某个距离
    pause(seconds) 暂停输入
    release(on_element=None) 在某个元素松开鼠标左键
    send_keys(*keys_to_send) 在当前元素中输入值
    send_keys_to_element(element, *keys_to_send) 给某个元素输入值
    perform() 相应存储的动作
    reset_actions() 清除所有已存储的动作

    单击、双击、右击

     

    来看看简单的鼠标左键单击、双击、鼠标右键单击。

    """
    通过 ActionChains 完成 单击、双击、右击
    
    练习网站:http://sahitest.com/demo/clicks.htm
    """
    
    from time import sleep
    from selenium import webdriver
    from selenium.webdriver import ActionChains
    driver = webdriver.Chrome()
    
    try:
        driver.get('http://sahitest.com/demo/clicks.htm')
    
        # 单击
        sleep(2)
        btn1 = driver.find_element_by_xpath('/html/body/form/input[3]')
        ActionChains(driver).click(btn1).perform()
    
        # 左键双击
        sleep(2)
        btn2 = driver.find_element_by_xpath('/html/body/form/input[2]')
        ActionChains(driver).double_click(btn2).perform()
    
        # 鼠标右键单击
        sleep(2)
        btn3 = driver.find_element_by_xpath('/html/body/form/input[4]')
        ActionChains(driver).context_click(btn3).perform()
    
    finally:
        sleep(5)
        driver.quit()

    拖动:drag_and_drag

     

    所谓的拖动,也就是鼠标左键点击标签不松开,直到拖动到指定标签后再松开。

    来个jqueryui的示例。

    '''
    
    https://jqueryui.com/droppable/
    
    '''
    
    import time
    from selenium import webdriver
    from selenium.webdriver import ActionChains
    
    
    
    driver = webdriver.Chrome()
    driver.get('https://jqueryui.com/droppable/')
    time.sleep(3)
    
    # 因为该页面中,有iframe标签,所以先切换
    frame = driver.find_element_by_tag_name('iframe')
    driver.switch_to.frame(frame)
    
    # 获取第一个元素
    div1 = driver.find_element_by_id('draggable')
    
    # 获取第二个元素
    div2 = driver.find_element_by_id('droppable')
    
    # 拖拽
    ActionChains(driver).drag_and_drop(div1, div2).perform()
    
    time.sleep(5)
    driver.quit()

    再来玩个游戏

    示例代码如下:

    import time
    from selenium import webdriver
    from selenium.webdriver.common.action_chains import ActionChains
    
    # 获取webdriver实例
    browser = webdriver.Chrome()
    # 访问URL
    browser.get('http://www.jq22.com/demo/pintu20151229/')
    
    # 点击开始按钮,开始游戏
    time.sleep(1)
    start = browser.find_element_by_id('start')
    ActionChains(browser).move_to_element(start).click().perform()
    
    # 准备拖动,首先要找到开始和结束的两个标签
    time.sleep(2)
    img1 = browser.find_element_by_xpath('//*[@id="container"]/div[18]')  # 选中开始标签
    img2 = browser.find_element_by_xpath('//*[@id="container"]/div[18]')  # 结束标签
    ActionChains(browser).move_to_element(img1).drag_and_drop(img1, img2).perform()
    
    # 关闭浏览器
    time.sleep(3)
    browser.quit()
    # 截止2019-6-5,代码无误
    
    

    效果如下:

    鼠标悬浮

     

    鼠标悬浮也就是将鼠标移动到某个元素上面触发的事件,那么使用selenium怎么实现呢?

    我们打开一个网站,使鼠标移动到超链接上,超链接会发生变化。

    import time
    from selenium import webdriver
    from selenium.webdriver import ActionChains
    
    
    
    driver = webdriver.Chrome()
    
    driver.get('https://www.cnblogs.com/neeo')
    
    time.sleep(3)
    # 获取指定元素
    a = driver.find_elements_by_class_name('postTitle2')[0]
    # 移动到指定元素
    ActionChains(driver).move_to_element(a).perform()
    
    # 点击它
    time.sleep(2)
    ActionChains(driver).move_to_element(a).click().perform()
    
    
    time.sleep(5)
    driver.quit()

    再来一个淘宝官网的示例,要求:

    • 循环悬浮主题市场列表。
    • 然后悬浮【女装/男装/内衣】,并点击其内的【夏上新】。
    import time
    from selenium import webdriver
    from selenium.webdriver import ActionChains as AC
    
    driver = webdriver.Chrome()
    
    driver.get('https://www.taobao.com/')
    
    # 获取 主题市场 列表
    menu_list = driver.find_elements_by_class_name('J_Cat')
    print(menu_list.__len__())
    for i in menu_list:   # 循环模拟鼠标悬浮
        AC(driver).move_to_element(i).perform()
        time.sleep(0.5)
    
    # 悬浮到 女装/男装/内衣
    time.sleep(2)
    AC(driver).move_to_element(menu_list[0]).perform()
    # 点击其内的 夏上新 链接
    time.sleep(2)
    obj = driver.find_element_by_xpath('/html/body/div[4]/div[1]/div[1]/div[1]/div/div/div[1]/div[1]/div[1]/p/a[1]')
    print(obj.text)
    obj.click()
    
    time.sleep(6)
    driver.quit()

    滑动验证

     

    代码:https://www.cnblogs.com/Neeo/articles/10996274.html
    效果:

  • 相关阅读:
    Java多线程总结
    Linux命令总结
    Java笔记
    JDK7和JDK8一些重要新特性
    第八周(11.04-11.10)----每周报告
    第八周(11.04-11.10)----结对项目----逆波兰
    第八周(11.04-11.10)----个人作业----历年学生作品点评
    第七周PSP(10.27-11.03)
    第七周(10.27-11.03)----补交第六周(10.20-26)每周例行报告
    个人项目----词频统计WEB(部分功能)
  • 原文地址:https://www.cnblogs.com/zhang-da/p/12292454.html
Copyright © 2011-2022 走看看