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的几种标准输出重定向方式
Aug 15 Python
Python实现多并发访问网站功能示例
Jun 19 Python
python使用sqlite3时游标使用方法
Mar 13 Python
python中实现将多个print输出合成一个数组
Apr 19 Python
Linux下python与C++使用dlib实现人脸检测
Jun 29 Python
Python3.5实现的三级菜单功能示例
Mar 25 Python
pandas进行时间数据的转换和计算时间差并提取年月日
Jul 06 Python
python二维键值数组生成转json的例子
Dec 06 Python
pytorch 实现将自己的图片数据处理成可以训练的图片类型
Jan 08 Python
DataFrame 数据合并实现(merge,join,concat)
Jun 14 Python
Python把图片转化为pdf代码实例
Jul 28 Python
python 下划线的不同用法
Oct 24 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循环结构实例讲解
2014/02/10 PHP
PHP实现登录验证码校验功能
2018/05/17 PHP
laravel model 两表联查示例
2019/10/24 PHP
PHP 对象继承原理与简单用法示例
2020/04/21 PHP
js GridView 实现自动计算操作代码
2009/03/25 Javascript
地址栏传递中文参数乱码在js里用escape转码
2013/08/28 Javascript
原生javascript模仿win8等待提示圆圈进度条
2014/04/24 Javascript
jQuery中unbind()方法用法实例
2015/01/19 Javascript
JQuery使用index方法获取Jquery对象数组下标的方法
2015/05/18 Javascript
js仿微信语音播放实现思路
2016/12/12 Javascript
Vue完整项目构建(进阶篇)
2018/02/10 Javascript
Node.js的Koa实现JWT用户认证方法
2018/05/05 Javascript
JS实现鼠标拖拽盒子移动及右键点击盒子消失效果示例
2019/01/29 Javascript
JavaScript遍历DOM元素的常见方式示例
2019/02/16 Javascript
Vue表单之v-model绑定下拉列表功能
2019/05/14 Javascript
layui表格数据重载
2019/07/27 Javascript
手写Vue源码之数据劫持示例详解
2021/01/04 Vue.js
python生成指定长度的随机数密码
2014/01/23 Python
基于scrapy实现的简单蜘蛛采集程序
2015/04/17 Python
python实现简单ftp客户端的方法
2015/06/28 Python
python在Windows下安装setuptools(easy_install工具)步骤详解
2016/07/01 Python
python基础教程项目四之新闻聚合
2018/04/02 Python
python导入模块交叉引用的方法
2019/01/19 Python
选择python进行数据分析的理由和优势
2019/06/25 Python
python找出因数与质因数的方法
2019/07/25 Python
Python中利用LSTM模型进行时间序列预测分析的实现
2019/07/26 Python
Python实现网页截图(PyQT5)过程解析
2019/08/12 Python
python通过实例讲解反射机制
2019/10/17 Python
利用pandas向一个csv文件追加写入数据的实现示例
2020/04/23 Python
html table呈现个人简历以及单元格宽度失效的问题解决
2021/01/22 HTML / CSS
用Python写一个for循环的例子
2016/07/19 面试题
我爱我校演讲稿
2014/05/21 职场文书
机械电子工程专业求职信
2014/06/22 职场文书
四风问题对照检查材料整改措施
2014/09/27 职场文书
小学数学继续教育研修日志
2015/11/13 职场文书
初三数学教学反思
2016/02/17 职场文书