pywin32介绍到入门
pywin32介绍
- 1. pywin32从驱动层模拟键盘鼠标的输入!
- 2. 注意 pip install pywin32安装之后 是这样的三个包:
- 3. pywin32的搜索关键词
1. pywin32从驱动层模拟键盘鼠标的输入!
比如我们打算写一个 某银行网银登陆 的爬虫,因为该银行网站的ActiveX控件的限制,只能在win环境下使用ie浏览器,简单测试代码如下
# 这是错误示例
from selenium import webdriverclass Loginer(object):def __init__(self, username):self.username = usernameiedriver = '.\IEDriverServer.exe' # iedriver路径self.driver = webdriver.Ie(iedriver)self.driver.delete_all_cookies()self.driver.get('https://perbank.abchina.com/EbankSite/startup.do')def input_name(self):input('准备输入用户名!')self.driver.find_element_by_id('username').send_keys(self.username)if __name__ == '__main__':username = 'testlogin'login = Loginer(username)login.input_name()
现象:各种报错!无论是否加载控件都不能输入账号! 短时间又搞不定activeX加密控件!网站有高级反爬,这就是那剩下5%的网站其中之一!此时我们怎么办呢?
看这个文件!input_key.py我们可以从驱动层模拟鼠标键盘的动作!
注意:
1.需要手动调整ie浏览器的位置或调整代码中的坐标参数
2.被selenium控制的ie浏览器必须调整为100%大小比例
import win32api
import win32con
import win32gui
from ctypes import *
import time VK_CODE = { 'backspace':0x08, 'tab':0x09, 'clear':0x0C, 'enter':0x0D, 'shift':0x10, 'ctrl':0x11, 'alt':0x12, 'pause':0x13, 'caps_lock':0x14, 'esc':0x1B, 'spacebar':0x20, 'page_up':0x21, 'page_down':0x22, 'end':0x23, 'home':0x24, 'left_arrow':0x25, 'up_arrow':0x26, 'right_arrow':0x27, 'down_arrow':0x28, 'select':0x29, 'print':0x2A, 'execute':0x2B, 'print_screen':0x2C, 'ins':0x2D, 'del':0x2E, 'help':0x2F, '0':0x30, '1':0x31, '2':0x32, '3':0x33, '4':0x34, '5':0x35, '6':0x36, '7':0x37, '8':0x38, '9':0x39, 'a':0x41, 'b':0x42, 'c':0x43, 'd':0x44, 'e':0x45, 'f':0x46, 'g':0x47, 'h':0x48, 'i':0x49, 'j':0x4A, 'k':0x4B, 'l':0x4C, 'm':0x4D, 'n':0x4E, 'o':0x4F, 'p':0x50, 'q':0x51, 'r':0x52, 's':0x53, 't':0x54, 'u':0x55, 'v':0x56, 'w':0x57, 'x':0x58, 'y':0x59, 'z':0x5A, 'numpad_0':0x60, 'numpad_1':0x61, 'numpad_2':0x62, 'numpad_3':0x63, 'numpad_4':0x64, 'numpad_5':0x65, 'numpad_6':0x66, 'numpad_7':0x67, 'numpad_8':0x68, 'numpad_9':0x69, 'multiply_key':0x6A, 'add_key':0x6B, 'separator_key':0x6C, 'subtract_key':0x6D, 'decimal_key':0x6E, 'divide_key':0x6F, 'F1':0x70, 'F2':0x71, 'F3':0x72, 'F4':0x73, 'F5':0x74, 'F6':0x75, 'F7':0x76, 'F8':0x77, 'F9':0x78, 'F10':0x79, 'F11':0x7A, 'F12':0x7B, 'F13':0x7C, 'F14':0x7D, 'F15':0x7E, 'F16':0x7F, 'F17':0x80, 'F18':0x81, 'F19':0x82, 'F20':0x83, 'F21':0x84, 'F22':0x85, 'F23':0x86, 'F24':0x87, 'num_lock':0x90, 'scroll_lock':0x91, 'left_shift':0xA0, 'right_shift ':0xA1, 'left_control':0xA2, 'right_control':0xA3, 'left_menu':0xA4, 'right_menu':0xA5, 'browser_back':0xA6, 'browser_forward':0xA7, 'browser_refresh':0xA8, 'browser_stop':0xA9, 'browser_search':0xAA, 'browser_favorites':0xAB, 'browser_start_and_home':0xAC, 'volume_mute':0xAD, 'volume_Down':0xAE, 'volume_up':0xAF, 'next_track':0xB0, 'previous_track':0xB1, 'stop_media':0xB2, 'play/pause_media':0xB3, 'start_mail':0xB4, 'select_media':0xB5, 'start_application_1':0xB6, 'start_application_2':0xB7, 'attn_key':0xF6, 'crsel_key':0xF7, 'exsel_key':0xF8, 'play_key':0xFA, 'zoom_key':0xFB, 'clear_key':0xFE, '+':0xBB, ',':0xBC, '-':0xBD, '.':0xBE, '/':0xBF, "`":0xC0,';':0xBA, '[':0xDB, '\\':0xDC, ']':0xDD, "'":0xDE, '`':0xC0} class POINT(Structure): _fields_ = [("x", c_ulong),("y", c_ulong)] def get_mouse_point(): po = POINT() windll.user32.GetCursorPos(byref(po)) return int(po.x), int(po.y) def mouse_click(x=None,y=None): if not x is None and not y is None: mouse_move(x,y) time.sleep(0.05) win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0) time.sleep(0.05)win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP, 0, 0, 0, 0)def mouse_dclick(x=None,y=None): if not x is None and not y is None: mouse_move(x,y) time.sleep(0.05) win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0) win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0) def mouse_move(x,y): windll.user32.SetCursorPos(x, y) def key_input(str=''): for c in str: win32api.keybd_event(VK_CODE[c],0,0,0) win32api.keybd_event(VK_CODE[c],0,win32con.KEYEVENTF_KEYUP,0) time.sleep(0.01) def t0(): pass def t2(): mouse_click(800,200) for c in 'hello': win32api.keybd_event(65,0,0,0) #a键位码是86 win32api.keybd_event(65,0,win32con.KEYEVENTF_KEYUP,0) #print get_mouse_point() def t1(): #mouse_move(1024,470)aa #time.sleep(0.05) #mouse_dclick()HELLO mouse_dclick(1024,470) def t3(): mouse_click(1024,470) str = 'hello' for c in str: win32api.keybd_event(VK_CODE[c],0,0,0) #a键位码是86 win32api.keybd_event(VK_CODE[c],0,win32con.KEYEVENTF_KEYUP,0) time.sleep(0.01) def t4(str, x, y):mouse_click(x, y)key_input(str)if __name__ == "__main__": # 100 350是坐标参数,需要调整!t4('aaa', 100, 350) # 在这里进行测试输出位置!
打开ie浏览器某网银登陆界面,只要不断的调试函数中的X,Y坐标和IE浏览器的位置就可以进行模拟输入进而登陆!
2. 注意 pip install pywin32安装之后 是这样的三个包:
import win32api
import win32con
import win32gui
3. pywin32的搜索关键词
上边的那个只是初步的解决方案!更完美的解决方法我们需要了解几个关键词!
句柄
外挂
后台
可以通过pywein32包拿到ie浏览器的句柄,就可以随时获取ie的坐标,这样就不怕浏览器的位置发生改变了,也就不需要调整ie浏览器的位置,更不需要调整xy坐标参数了! 并且我们可以用pywin32包控制鼠标键盘的动作为后台运行,这样就不影响鼠标键盘的正常使用了
pywin32介绍到入门相关推荐
- .NET平台开源项目速览(6)FluentValidation验证组件介绍与入门(一)
原文:.NET平台开源项目速览(6)FluentValidation验证组件介绍与入门(一) 在文章:这些.NET开源项目你知道吗?让.NET开源来得更加猛烈些吧!(第二辑)中,给大家初步介绍了一下F ...
- RStudio介绍及入门
RStudio介绍及入门 1 R Studio 介绍 2 函数与对象 2.1 函数 2.2 数据输入 2.3 元素引用 3 R语言绘图 4 数据保存 5 学习建议 6 唠唠叨叨 Hello, 这里是行 ...
- 干货|以太坊全景介绍及入门学习路径(分享实录)
2019独角兽企业重金招聘Python工程师标准>>> 本次分享主要是针对以太坊的基本概念的介绍,属于入门级别,主要目的是帮助大家快速认识和了解以太坊. 自我介绍 大纲 1 交易所那 ...
- Dubbo系列(一)dubbo介绍和入门
Dubbo系列(一)dubbo介绍和入门 学习Dubbo 之前,先了解一下这几个问题: Dubbo是什么? 互联网发展的背景 Dubbo介绍 Dubbo的优势在哪里? 了解了dubbo之后,让我们从零 ...
- 7-Zip 解/压缩软件的介绍及入门使用
7-Zip 解/压缩软件的介绍及入门使用 7-Zip中文官方网站 百度网盘地址: 链接:https://pan.baidu.com/s/16cO-qbNi2aINiKa8kOibFQ 提取码:CSDN ...
- Poco的介绍和入门教学
Poco的介绍和入门教学 前言 前面我们已经介绍了基于图像识别的测试框架Airtest,通过图像识别,已经可以编写大部分的测试脚本.但是在某些特殊情况下,例如对于游戏或App里的动态元素,通过图像识别 ...
- mysql通用mapper_通用mapper的介绍和入门使用
通用mapper的介绍和入门使用 简介 通用Mapper都可以极大的方便开发人员.可以随意的按照自己的需要选择通用方法,还可以很方便的开发自己的通用方法. 极其方便的使用MyBatis单表的增删改查. ...
- 单片机类型介绍和入门单片机
单片机类型介绍和入门单片机 单片机是一种集成电路芯片,通常包含一个或多个中央处理器(CPU).存储器.输入输出端口(I/O)和计时器等部件,可以完成各种控制和数据处理任务.由于单片机内部集成了许多电子 ...
- Linux 岗位介绍及入门
14天学习训练营导师课程: 互联网老辛< 符合学习规律的超详细linux实战快速入门> 学习一直在路上,14天打卡学习第 1 天内容记录 Linux 岗位介绍及入门 文章目录 1.运维学习 ...
最新文章
- c# redis hashid如何设置过期时间_Redis中Key过期策略amp;淘汰机制
- Elasticsearch Query DSL基础介绍
- Tomcat6 Spring3 问题:严重: Error configuring application listener of class org.springframework.web.conte
- 进程的并发与并行,三种状态
- formidable处理提交的表单或文件的简单介绍
- 如何在 Kubernetes Pod 内进行网络抓包
- Struts2之初识篇(一)——与struts的区别和基本配置
- python后端面试题
- 稀疏贴图 SparseTexture
- 6.计算机在信息技术中的地位,信息技术在教育中的作用与地位
- 在DOS下如何加载SATA光驱驱动
- 详解汇编里的单步中断-T使用寄存器标志位TF和IF
- 安卓模拟定位mockLocation,闪退?
- APUE学习(一)基础知识
- 数据统计基础之F分布及其应用
- switch调函数 vue_vue3中轻松实现switch功能组件的全过程
- Ubuntu 16.04 桌面字体太小让它大大大
- 程序读写时间内存 硬盘 cache 访问速度数级对比
- vscode中文备注出现方框标注显示此字符非ascii字符如何取消
- 软件工程第四次作业 石墨文档IOS
热门文章
- Java时间格式化与解析
- Excel VBA 自动添加新行并递增ID
- 2023最新Thinkphp开发多平台自动发卡程序源码+支持免签支付/功能强大
- Cisco交换机基础命令
- [源码和文档分享]Qt实现的宠物小精灵对战游戏阶段二-用户的联网注册和登录...
- 探索自媒体领域之我见
- java-net-php-python-ssm电影影评网站计算机毕业设计程序
- 惠普星 BookPro14参数配置 惠普星 BookPro14评测怎么样
- html调用服务器串口,【1768】串口驱动HTML简单的网页服务器演示
- 微博宕机背后,高并发有哪些常见问题?