• webdriver处理鼠标右键菜单栏


    selenium中ActionChains类提供了鼠标操作的常用方法,但对于鼠标右键的菜单栏,无论是send_keys(Keys.ARROW_DOWN)还是send_keys("K")(注:前者是模拟键盘上的方向键,后者是通过字母以快捷方式打开)都显得无能为力

    一个比较典型的例子是百度图片另存为:想要在百度图片里选择一张"笔记本电脑"的图片并另存为,上面两种方法都是做不到的

    多次百度之后,发现有一篇文章解决了这个问题——WebDriver如何处理右键菜单》,文中提到win32api和win32con可以做这个事情,第一步是先引入:

    import win32api
    import win32con

    引入之后,如果我们要对按键进行操作,就要模拟一次按下和释放的过程,比如现在要按下键盘上的字母V键,由于V在ASCII码表中的键码是86,可以写成以下形式

    win32api.keybd_event(86,0,0,0)                         #字母V的键码是86
    win32api.keybd_event(86,0,win32con.KEYEVENTF_KEYUP,0)  #按下后再释放

    附上键位的ASCII码表

    完整的访问百度图片,选择图片另存为的代码如下

    from selenium import webdriver
    from selenium.webdriver.common.action_chains import ActionChains
    from selenium.webdriver.common.keys import Keys     #需要引入keys包
    import time
    import win32api
    import win32con
    
    #初始化chromedriver
    driver = webdriver.Chrome()
    
    #打开百度首页
    driver.get("http://www.baidu.com")
    
    #浏览器窗口最大化
    driver.maximize_window()
    
    #等待2s
    time.sleep(2)
    
    #定位到百度首页的更多产品
    more_xpath = "//a[@name='tj_briicon']"
    more_element = driver.find_element_by_xpath(more_xpath)
    
    #鼠标悬浮
    ActionChains(driver).move_to_element(more_element).perform()
    time.sleep(2)
    
    #点击图片
    img_element = driver.find_element_by_xpath("//a[@name='tj_img']").click()
    time.sleep(2)
    
    #定位百度图片输入框,并输入内容"笔记本电脑"
    input_element = driver.find_element_by_id("kw")
    input_element.send_keys("笔记本电脑")
    
    #等待2s
    time.sleep(2)
    
    #回车
    input_element.send_keys(Keys.ENTER)
    time.sleep(2)
    
    #定位到要右击的元素
    pc_img_element = driver.find_element_by_xpath("//a[@name='pn1']")
    
    #右键,打开右键菜单栏
    ActionChains(driver).context_click(pc_img_element).perform()
    time.sleep(2)
    
    #点击V图片另存为:
    #1. 按下键盘上的V键
    win32api.keybd_event(86, 0, 0, 0)
    
    #2. 释放键盘上的V键
    win32api.keybd_event(86, 0, win32con.KEYEVENTF_KEYUP, 0)

    参考文章

    http://blog.sina.com.cn/s/blog_5042ea610102w928.html

  • 相关阅读:
    os 模块删除图片操作
    python base64基本使用
    django 跨域
    git 回滚
    多线程
    原生sql子查询 和psql 子查询
    Python 3.x 中"HTTP Error 403: Forbidden"问题的解决方案
    报错(AttributeError: 'str' object has no attribute 'items')的解决办法
    C++虚函数
    C++泛型程序设计和多态
  • 原文地址:https://www.cnblogs.com/my_captain/p/9248952.html
Copyright © 2020-2023  润新知