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类定义的讲解
Nov 01 Python
win7安装python生成随机数代码分享
Dec 27 Python
深入Python函数编程的一些特性
Apr 13 Python
numpy中loadtxt 的用法详解
Aug 03 Python
浅谈python str.format与制表符\t关于中文对齐的细节问题
Jan 14 Python
基于Numba提高python运行效率过程解析
Mar 02 Python
python中对二维列表中一维列表的调用方法
Jun 07 Python
keras load model时出现Missing Layer错误的解决方式
Jun 11 Python
关于Python3的import问题(pycharm可以运行命令行import错误)
Nov 18 Python
python实现录制全屏和选择区域录屏功能
Feb 05 Python
用Python的绘图库(matplotlib)绘制小波能量谱
Apr 17 Python
python人工智能human learn绘图可创建机器学习模型
Nov 23 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验证码类(分享)
2013/08/06 PHP
PHP手机号中间四位用星号*代替显示的实例
2017/06/02 PHP
php连接MSsql server的五种方法总结
2018/03/04 PHP
PHP的JSON封装、转变及输出操作示例
2019/09/27 PHP
window.open不被拦截的实现代码
2012/08/22 Javascript
使用JavaScript 实现各种跨域的方法
2013/05/08 Javascript
JavaScript动态插入script的基本思路及实现函数
2013/11/11 Javascript
Seajs 简易文档 提供简单、极致的模块化开发体验
2016/04/13 Javascript
DOM操作原生js 的bug,使用jQuery 可以消除的解决方法
2016/09/04 Javascript
vuejs在解析时出现闪烁的原因及防止闪烁的方法
2016/09/19 Javascript
JavaScript排序算法动画演示效果的实现方法
2016/10/18 Javascript
Js利用prototype自定义数组方法示例
2017/10/20 Javascript
微信小程序实现电子签名并导出图片
2020/05/27 Javascript
Vue触发input选取文件点击事件操作
2020/08/07 Javascript
vue.js实现点击图标放大离开时缩小的代码
2021/01/27 Vue.js
Python解决鸡兔同笼问题的方法
2014/12/20 Python
Python的函数的一些高阶特性
2015/04/27 Python
python搭建虚拟环境的步骤详解
2016/09/27 Python
基于Python的文件类型和字符串详解
2017/12/21 Python
Python面向对象类的继承实例详解
2018/06/27 Python
django admin.py 外键,反向查询的实例
2019/07/26 Python
python 模拟贷款卡号生成规则过程解析
2019/08/30 Python
如何获取Python简单for循环索引
2019/11/21 Python
python中p-value的实现方式
2019/12/16 Python
Python容器类型公共方法总结
2020/08/19 Python
Python编写单元测试代码实例
2020/09/10 Python
HTML5 常用语法一览(列举不支持的属性)
2010/01/26 HTML / CSS
介绍一下UNIX启动过程
2013/11/14 面试题
高中打架检讨书
2014/02/13 职场文书
土建专业毕业生自荐书
2014/07/04 职场文书
国庆65周年演讲稿:回首往昔,展望未来
2014/09/21 职场文书
学校领导班子四风问题整改意见
2014/10/02 职场文书
银行贷款收入证明
2014/10/17 职场文书
干部作风纪律整顿心得体会
2016/01/23 职场文书
Java基于字符界面的简易收银台
2021/06/26 Java/Android
redis击穿 雪崩 穿透超详细解决方案梳理
2022/03/17 Redis