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实现从web抓取文档的方法
Sep 26 Python
初步探究Python程序的执行原理
Apr 11 Python
Pyinstaller打包.py生成.exe的方法和报错总结
Apr 02 Python
使用Python完成15位18位身份证的互转功能
Nov 06 Python
Python 异步协程函数原理及实例详解
Nov 13 Python
Python实现隐马尔可夫模型的前向后向算法的示例代码
Dec 31 Python
Centos7下源码安装Python3 及shell 脚本自动安装Python3的教程
Mar 07 Python
python pyqtgraph 保存图片到本地的实例
Mar 14 Python
django之从html页面表单获取输入的数据实例
Mar 16 Python
python异步Web框架sanic的实现
Apr 27 Python
python 解决selenium 中的 .clear()方法失效问题
Sep 01 Python
python使用glob检索文件的操作
May 20 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
文件系统基本操作类
2006/11/23 PHP
php下利用curl判断远程文件是否存在的实现代码
2011/10/08 PHP
php中{}大括号是什么意思
2013/12/01 PHP
Yii2框架实现注册和登录教程
2016/09/30 PHP
在PHP中输出JS语句以及乱码问题的解决方案
2019/02/13 PHP
php设计模式之备忘模式分析【星际争霸游戏案例】
2020/03/24 PHP
基于nodejs实现微信支付功能
2017/12/20 NodeJs
JavaScript判断日期时间差的实例代码
2018/03/01 Javascript
node+koa2+mysql+bootstrap搭建一个前端论坛
2018/05/06 Javascript
Node错误处理笔记之挖坑系列教程
2018/06/05 Javascript
webpack手动配置React开发环境的步骤
2018/07/02 Javascript
angularjs使用div模拟textarea文本框的方法
2018/10/02 Javascript
C#程序员入门学习微信小程序的笔记
2019/03/05 Javascript
Vue利用Blob下载原生二进制数组文件
2019/09/25 Javascript
JavaScript判断数组类型的方法
2019/10/23 Javascript
js实现录音上传功能
2019/11/22 Javascript
python 自动提交和抓取网页
2009/07/13 Python
树莓派使用USB摄像头和motion实现监控
2019/06/22 Python
Python实现最常见加密方式详解
2019/07/13 Python
Python协程操作之gevent(yield阻塞,greenlet),协程实现多任务(有规律的交替协作执行)用法详解
2019/10/14 Python
python命令 -u参数用法解析
2019/10/24 Python
jenkins+python自动化测试持续集成教程
2020/05/12 Python
python高级特性简介
2020/08/13 Python
CSS实现限制字数功能当对象内文本溢出时显示省略标记
2014/08/20 HTML / CSS
eBay英国购物网站:eBay.co.uk
2019/06/19 全球购物
一道Delphi面试题
2016/10/28 面试题
优秀员工自荐书
2013/12/19 职场文书
实习协议书范本
2014/09/25 职场文书
雨花台导游词
2015/02/06 职场文书
2015年医德医风工作总结
2015/04/02 职场文书
学校2015年纠风工作总结
2015/05/15 职场文书
高中军训感想
2015/08/07 职场文书
导游词之西递宏村
2019/12/10 职场文书
MySQL Router的安装部署
2021/04/24 MySQL
Redis监控工具RedisInsight安装与使用
2022/03/21 Redis
Python学习之os包使用教程详解
2022/03/21 Python