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提取字典key列表的方法
Jul 11 Python
python字符串中的单双引
Feb 16 Python
Django在win10下的安装并创建工程
Nov 20 Python
Python机器学习之scikit-learn库中KNN算法的封装与使用方法
Dec 14 Python
python 设置xlabel,ylabel 坐标轴字体大小,字体类型
Jul 23 Python
Python爬虫爬取煎蛋网图片代码实例
Dec 16 Python
python通过安装itchat包实现微信自动回复收到的春节祝福
Jan 19 Python
python实现ftp文件传输系统(案例分析)
Mar 20 Python
django实现HttpResponse返回json数据为中文
Mar 27 Python
python将dict中的unicode打印成中文实例
May 11 Python
python爬虫构建代理ip池抓取数据库的示例代码
Sep 22 Python
Python调用系统命令os.system()和os.popen()的实现
Dec 31 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/10/09 PHP
php 判断是否是中文/英文/数字示例代码
2013/09/30 PHP
destoon切换城市后实现logo旁边显示地区名称的方法
2014/08/21 PHP
php截取html字符串及自动补全html标签的方法
2015/01/15 PHP
PHP Imagick完美实现图片裁切、生成缩略图、添加水印
2016/02/22 PHP
php生成无限栏目树
2017/03/16 PHP
phpStudy配置多站点多域名和多端口的方法
2017/09/01 PHP
PHP实现Snowflake生成分布式唯一ID的方法示例
2020/08/30 PHP
js同时按下两个方向键
2007/12/01 Javascript
jQuery学习笔记之toArray()
2014/06/09 Javascript
关于jQuery判断元素是否存在的问题示例探讨
2014/07/21 Javascript
jQuery插件EasyUI校验规则 validatebox验证框
2015/11/29 Javascript
微信小程序开发(一) 微信登录流程详解
2017/01/11 Javascript
vue.js模仿京东省市区三级联动的选择组件实例代码
2017/11/22 Javascript
使用vue的transition完成滑动过渡的示例代码
2018/06/25 Javascript
JavaScript寄生组合式继承原理与用法分析
2019/01/11 Javascript
vue滚动固定顶部及修改样式的实例代码
2019/05/30 Javascript
ES6基础之 Promise 对象用法实例详解
2019/08/22 Javascript
[52:09]2014 DOTA2华西杯精英邀请赛 5 25 NewBee VS DK第二场
2014/05/26 DOTA
Python实现抓取网页并且解析的实例
2014/09/20 Python
浅谈Python的文件类型
2016/05/30 Python
Python使用filetype精确判断文件类型
2017/07/02 Python
pycharm使用matplotlib.pyplot不显示图形的解决方法
2018/10/28 Python
python程序变成软件的实操方法
2019/06/24 Python
CSS3 渐变(Gradients)之CSS3 线性渐变
2016/07/08 HTML / CSS
浅谈CSS3动画的回调处理
2016/07/21 HTML / CSS
美国流行背包品牌:JanSport(杰斯伯)
2018/03/02 全球购物
英国品牌男装折扣网站:Brown Bag
2018/03/08 全球购物
澳大利亚最大的网上油画销售画廊:Direct Art Australia
2018/04/15 全球购物
Diptyque英国官方网站:源自法国的知名香氛品牌
2019/08/28 全球购物
小区门卫工作职责
2013/12/14 职场文书
兴趣班停课通知
2015/04/24 职场文书
Nginx快速入门教程
2021/03/31 Servers
python Tkinter的简单入门教程
2021/04/11 Python
Linux中各个目录的作用与内容
2022/06/28 Servers
Java获取字符串编码格式实现思路
2022/09/23 Java/Android