python中的句柄操作的方法示例


Posted in Python onJune 20, 2019

通过窗口标题获取句柄

import win32gui
 
hld = win32gui.FindWindow(None,u"Adobe Acrobat") #返回窗口标题为Adobe Acrobat的句柄

通过父窗口句柄获取子句柄

#parent为父窗口句柄id
def get_child_windows(parent):
  '''
  获得parent的所有子窗口句柄
   返回子窗口句柄列表
   '''
  if not parent:
    return
  hwndChildList = []
  win32gui.EnumChildWindows(parent, lambda hwnd, param: param.append(hwnd), hwndChildList)
  return hwndChildList

根据句柄获取句柄标题和类名

import win32gui
title = win32gui.GetWindowText(jbid)  #jbid为句柄id
#获取标题
clsname = win32gui.GetClassName(jbid)  
#获取类名

根据句柄获取窗口位置

import win32gui
left, top, right, bottom = win32gui.GetWindowRect(jbid)
#分别为左、上、右、下的窗口位置

根据句柄进行点击操作

import win32api,win32con
 
win32api.SetCursorPos([横坐标, 纵坐标])
#根据横纵坐标定位光标
win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP | win32con.MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0)
#给光标定位的位置进行单击操作(若想进行双击操作,可以延时几毫秒再点击一次)
win32api.mouse_event(win32con.MOUSEEVENTF_RIGHTUP | win32con.MOUSEEVENTF_RIGHTDOWN, 0, 0, 0, 0)
#给光标定位的位置进行右击操作

根据句柄将窗口放在最前

win32gui.SetForegroundWindow(jbid)

Selenium+Python句柄操作

当我们打开浏览器,点击页面链接时,经常会遇到新的页面会在新窗口打开,而Selenium不会去自动识别新窗口,所以我们要做句柄切换操作,或者使用JS,如何操作呢?

(1)切换句柄:switch_to_window

# coding=utf-8 
from selenium import webdriver
import time

''' 主要运用方法:
1.current_window_handl:获得当前窗口句柄 
2.window_handles:返回所以窗口的句柄到当前会话
3.switch_to_window():切换窗口函数 
'''  
# 访问百度 
driver = webdriver.Firefox()
driver.get("http://www.jianshu.com")
driver.maximize_window()
time.sleep(3)
# 获取简书首页句柄 
current_windows = driver.current_window_handle
#打开第一条对应链接 
driver.find_element_by_xpath('/html/body/div[1]/div/div[1]/div[4]/ul/li[1]/div/a').click()
time.sleep(3)
# 获取所有打开句柄 
all_handles = driver.window_handles
# 进入新打开链接窗口 
for handle in all_handles:
  if handle != current_windows:
    driver.switch_to_window(handle)
    print(u"切换句柄成功")
time.sleep(4)
driver.quit()

(2)使用JS处理方法如下:

我们需要使用JS对HTML做源码处理,打开百度并登录,右键某个链接,查看:

python中的句柄操作的方法示例

可以看到target属性后边都紧跟着'_blank',我们想在当前页面打开,就必须需要去掉这个属性,操作步骤如下:

js = 'document.getElementsByClassName("mnav")[0].target="";'
driver.execute_script(js)
driver.find_element_by_link_text("新闻").click()

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python 判断一个进程是否存在
Apr 09 Python
利用Python实现颜色色值转换的小工具
Oct 27 Python
Python cookbook(数据结构与算法)根据字段将记录分组操作示例
Mar 19 Python
Python排序算法之选择排序定义与用法示例
Apr 29 Python
python机器学习之KNN分类算法
Aug 29 Python
在Python中给Nan值更改为0的方法
Oct 30 Python
Python使用sqlalchemy模块连接数据库操作示例
Mar 13 Python
基于pytorch的lstm参数使用详解
Jan 14 Python
python如何更新包
Jun 11 Python
python 求两个向量的顺时针夹角操作
Mar 04 Python
Python之matplotlib绘制饼图
Apr 13 Python
python绘制云雨图raincloud plot
Aug 05 Python
使用python获取(宜宾市地震信息)地震信息
Jun 20 #Python
一篇文章了解Python中常见的序列化操作
Jun 20 #Python
python集合是否可变总结
Jun 20 #Python
Django如何自定义model创建数据库索引的顺序
Jun 20 #Python
pyqt 多窗口之间的相互调用方法
Jun 19 #Python
pyqt5 实现多窗口跳转的方法
Jun 19 #Python
快速解决pyqt5窗体关闭后子线程不同时退出的问题
Jun 19 #Python
You might like
PHP数据库万能引擎类adodb配置使用以及实例集锦
2014/06/12 PHP
php和editplus正则表达式去除空白行
2015/04/17 PHP
PHP 扩展Memcached命令用法实例总结
2020/06/04 PHP
filemanage功能中用到的lib.js
2007/04/08 Javascript
javascript 动态修改样式和层叠样式表代码
2010/04/27 Javascript
Express.JS使用详解
2014/07/17 Javascript
JavaScript使ifram跨域相互访问及与PHP通信的实例
2016/03/03 Javascript
js实现右键自定义菜单
2016/12/03 Javascript
jquery 实现复选框的全选操作实例代码
2017/01/24 Javascript
layui的table单击行勾选checkbox功能方法
2018/08/14 Javascript
2019 年编写现代 JavaScript 代码的5个小技巧(小结)
2019/01/15 Javascript
原生js+css实现tab切换功能
2020/09/17 Javascript
python+mysql实现简单的web程序
2014/09/11 Python
jupyter安装小结
2016/03/13 Python
python实现列表中由数值查到索引的方法
2018/06/27 Python
Python+OpenCV实现图像融合的原理及代码
2018/12/03 Python
python对常见数据类型的遍历解析
2019/08/27 Python
python 用 xlwings 库 生成图表的操作方法
2019/12/22 Python
Python3常见函数range()用法详解
2019/12/30 Python
python数据类型可变不可变知识点总结
2020/03/06 Python
python和js交互调用的方法
2020/06/23 Python
Html5之title吸顶功能
2018/06/04 HTML / CSS
Coltorti Boutique官网:来自意大利的设计师品牌买手店
2018/11/09 全球购物
英国女性化妆品收纳和家具网站:Beautify
2019/12/07 全球购物
高中生学习总结的自我评价范文
2013/10/13 职场文书
国庆节文艺活动方案
2014/02/03 职场文书
《风娃娃》教学反思
2014/04/19 职场文书
公司募捐倡议书
2014/05/14 职场文书
机械加工与数控专业自荐书
2014/06/04 职场文书
经营理念口号
2014/06/21 职场文书
个人务虚会发言材料
2014/10/20 职场文书
2014年行政工作总结
2014/11/19 职场文书
工程移交协议书
2016/03/24 职场文书
php随机生成验证码,php随机生成数字,php随机生成数字加字母!
2021/04/01 PHP
面试分析分布式架构Redis热点key大Value解决方案
2022/03/13 Redis
mysql sock文件存储了什么信息
2022/07/15 MySQL