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介绍到入门相关推荐

  1. .NET平台开源项目速览(6)FluentValidation验证组件介绍与入门(一)

    原文:.NET平台开源项目速览(6)FluentValidation验证组件介绍与入门(一) 在文章:这些.NET开源项目你知道吗?让.NET开源来得更加猛烈些吧!(第二辑)中,给大家初步介绍了一下F ...

  2. RStudio介绍及入门

    RStudio介绍及入门 1 R Studio 介绍 2 函数与对象 2.1 函数 2.2 数据输入 2.3 元素引用 3 R语言绘图 4 数据保存 5 学习建议 6 唠唠叨叨 Hello, 这里是行 ...

  3. 干货|以太坊全景介绍及入门学习路径(分享实录)

    2019独角兽企业重金招聘Python工程师标准>>> 本次分享主要是针对以太坊的基本概念的介绍,属于入门级别,主要目的是帮助大家快速认识和了解以太坊. 自我介绍 大纲 1 交易所那 ...

  4. Dubbo系列(一)dubbo介绍和入门

    Dubbo系列(一)dubbo介绍和入门 学习Dubbo 之前,先了解一下这几个问题: Dubbo是什么? 互联网发展的背景 Dubbo介绍 Dubbo的优势在哪里? 了解了dubbo之后,让我们从零 ...

  5. 7-Zip 解/压缩软件的介绍及入门使用

    7-Zip 解/压缩软件的介绍及入门使用 7-Zip中文官方网站 百度网盘地址: 链接:https://pan.baidu.com/s/16cO-qbNi2aINiKa8kOibFQ 提取码:CSDN ...

  6. Poco的介绍和入门教学

    Poco的介绍和入门教学 前言 前面我们已经介绍了基于图像识别的测试框架Airtest,通过图像识别,已经可以编写大部分的测试脚本.但是在某些特殊情况下,例如对于游戏或App里的动态元素,通过图像识别 ...

  7. mysql通用mapper_通用mapper的介绍和入门使用

    通用mapper的介绍和入门使用 简介 通用Mapper都可以极大的方便开发人员.可以随意的按照自己的需要选择通用方法,还可以很方便的开发自己的通用方法. 极其方便的使用MyBatis单表的增删改查. ...

  8. 单片机类型介绍和入门单片机

    单片机类型介绍和入门单片机 单片机是一种集成电路芯片,通常包含一个或多个中央处理器(CPU).存储器.输入输出端口(I/O)和计时器等部件,可以完成各种控制和数据处理任务.由于单片机内部集成了许多电子 ...

  9. Linux 岗位介绍及入门

    14天学习训练营导师课程: 互联网老辛< 符合学习规律的超详细linux实战快速入门> 学习一直在路上,14天打卡学习第 1 天内容记录 Linux 岗位介绍及入门 文章目录 1.运维学习 ...

最新文章

  1. c# redis hashid如何设置过期时间_Redis中Key过期策略amp;淘汰机制
  2. Elasticsearch Query DSL基础介绍
  3. Tomcat6 Spring3 问题:严重: Error configuring application listener of class org.springframework.web.conte
  4. 进程的并发与并行,三种状态
  5. formidable处理提交的表单或文件的简单介绍
  6. 如何在 Kubernetes Pod 内进行网络抓包
  7. Struts2之初识篇(一)——与struts的区别和基本配置
  8. python后端面试题
  9. 稀疏贴图 SparseTexture
  10. 6.计算机在信息技术中的地位,信息技术在教育中的作用与地位
  11. 在DOS下如何加载SATA光驱驱动
  12. 详解汇编里的单步中断-T使用寄存器标志位TF和IF
  13. 安卓模拟定位mockLocation,闪退?
  14. APUE学习(一)基础知识
  15. 数据统计基础之F分布及其应用
  16. switch调函数 vue_vue3中轻松实现switch功能组件的全过程
  17. Ubuntu 16.04 桌面字体太小让它大大大
  18. 程序读写时间内存 硬盘 cache 访问速度数级对比
  19. vscode中文备注出现方框标注显示此字符非ascii字符如何取消
  20. 软件工程第四次作业 石墨文档IOS

热门文章

  1. Java时间格式化与解析
  2. Excel VBA 自动添加新行并递增ID
  3. 2023最新Thinkphp开发多平台自动发卡程序源码+支持免签支付/功能强大
  4. Cisco交换机基础命令
  5. [源码和文档分享]Qt实现的宠物小精灵对战游戏阶段二-用户的联网注册和登录...
  6. 探索自媒体领域之我见
  7. java-net-php-python-ssm电影影评网站计算机毕业设计程序
  8. 惠普星 BookPro14参数配置 惠普星 BookPro14评测怎么样
  9. html调用服务器串口,【1768】串口驱动HTML简单的网页服务器演示
  10. 微博宕机背后,高并发有哪些常见问题?