我们在抓取数据时,目标网站通常是浏览器网页B/S架构的,当需要爬取客户端C/S架构时就不是那么好抓包了,虽然可以下载网络代理如 Fiddler ,Proxifier,不是每个客户端都可以抓到包的,也许你会通过dnSpy反编译查看源代码,也不一定能够反编译成功,很多是C++写的,你没有学过C++,去看去分析人家的源代码,那有多苦涩是吧。
废话不多说,就简单说一下如何利用pyautogui来获取我们想要的数据吧
PyAutoGUI 中文帮助文档-简介
PyAutoGui是一个跨平台GUI自动化库。
PyAutoGUI是一个Python模块,用于以编程方式控制鼠标和键盘。
PyPutoGUI可以从pip工具安装或从PyPI下载:
https://pypi.python.org/pypi/PyAutoGUI
源代码可在以下网址获得:https://github.com/asweigart/pyautogui
1.简介
目的
PyAutoGUI的目的是为GUI自动化提供跨平台的Python模块。 API的设计尽可能简单,具有合理的默认值。
pyautogui基本用法
1.安装pyautogui
pip install pyautogui -i https://pypi.douban.com/simple/
2.pyautogui常用操作
import pyautogui
# 常用操作--控制鼠标**********
pyautogui.PAUSE = 1 # 调用在执行动作后暂停的秒数
pyautogui.FAILSAFE = True # 启用自动防故障功能,左上角的坐标为(0,0),将鼠标移到屏幕的左上角,来抛出failSafeException异常
# 判断(x,y)是否在屏幕上
x, y = 180, 180
pyautogui.onScreen(x, y) # 结果为true
width, height = pyautogui.size() # 获取屏幕的宽度和高度,等于你屏幕设置的显示分辨率
print(width, height)
currentMouseX, currentMouseY = pyautogui.position() # 鼠标当前位置。正在执行的脚本,你强行介入,可以加入判断一下,是不是在自动化操作范围内
print(currentMouseX, currentMouseY)
pyautogui.moveTo(250, 250, duration=0.25) # 鼠标移动到(250,250),移动的速度是0.25
pyautogui.dragTo(200, 400, button='left') # 按住鼠标左键,把鼠标拖拽到(200, 400)位置
pyautogui.dragTo(300, 400, 2, button='left') # 按住鼠标左键,用2秒钟把鼠标拖拽到(300, 400)位置
pyautogui.dragRel(0, -60, duration=0.2) # 按住鼠标左键,用0.2秒钟把鼠标向上拖拽
# pyautogui.click(x=moveToX, y=moveToY, clicks=num_of_clicks, interval=secs_between_clicks, button='left')
# 其中,button属性可以设置成left,middle和right。
pyautogui.click(110, 200, 2, 0.25, button='left')
pyautogui.click(x=100, y=200, duration=2) # 先移动到(100, 200)再单击
pyautogui.click() # 鼠标当前位置点击一下
pyautogui.doubleClick() # 鼠标当前位置左击两下
pyautogui.doubleClick(x=100, y=150, button="left") # 鼠标在(100,150)位置左击两下
pyautogui.tripleClick() # 鼠标当前位置左击三下
pyautogui.mouseDown() # 鼠标左键按下再松开
pyautogui.mouseUp()
pyautogui.mouseDown(button='right') # 按下鼠标右键
pyautogui.mouseUp(button='right', x=100, y=200) # 移动到(100, 200)位置,然后松开鼠标右键
# scroll函数控制鼠标滚轮的滚动,amount_to_scroll参数表示滚动的格数。正数则页面向上滚动,负数则向下滚动
# pyautogui.scroll(clicks=amount_to_scroll, x=moveToX, y=moveToY)
pyautogui.scroll(5, 20, 2)
pyautogui.scroll(5) # 向上滚动5格
pyautogui.scroll(-5) # 向下滚动5格
pyautogui.scroll(10, x=100, y=100) # 移动到(100, 100)位置再向上滚动10格
# 常用操作--控制键盘**********
pyautogui.typewrite('Hello world!') # 输入Hello world!字符串
pyautogui.typewrite('Hello world!', interval=0.25) # 每次输入间隔0.25秒,输入Hello world!
pyautogui.press('enter') # 按下并松开(轻敲)回车键
pyautogui.press(['left', 'left', 'left', 'left']) # 按下并松开(轻敲)四下左方向键
pyautogui.keyDown('ctrl') # 按下`ctrl`键
pyautogui.keyUp('ctrl') # 松开`ctrl`键
pyautogui.keyDown('shift')
pyautogui.press('7')
pyautogui.keyUp('shift') # 输出 & 符号的按键
pyautogui.hotkey('ctrl', 'c') # 组合按键(Ctrl+C),复制功能,按下并松开'ctrl'和'c'按键
pyautogui.hotkey('ctrl', 'v') # 组合按键(Ctrl+V),粘贴功能,按下并松开'ctrl'和'v'按键
# 常用操作--弹窗操作**********
pyautogui.alert(text='采集完成!', title='采集提示', button='好的')
# 显示一个简单的带文字、OK和Cancel按钮的消息弹窗,用户点击后返回被点击button的文字,支持自定义数字、文字的列表。
a = pyautogui.confirm(text='', title='', buttons=range(10)) # 10个按键0-9的消息弹窗
print(a) # 输出结果为你选的数字
# 可以输入的消息弹窗,带OK和Cancel按钮。用户点击OK按钮返回输入的文字,点击Cancel按钮返回None。
pyautogui.prompt(text='', title='请输入账号', default='')
# 样式同prompt(),用于输入密码,消息用*表示。带OK和Cancel按钮。用户点击OK按钮返回输入的文字,点击Cancel按钮返回None。
pyautogui.password(text='', title='请输入密码', default='', mask='*')
# 常用操作--截图操作**********
im = pyautogui.screenshot(r'my_screenshot.png') # 截全屏并设置保存图片的位置和名称
print(im) # 打印图片的属性
# 不截全屏,截取区域图片。截取区域region参数为:左上角X、Y坐标值、宽度和高度
pyautogui.screenshot(r'region_screenshot.png', region=(0, 0, 300, 500))
# 获得文件图片在现在的屏幕上面的坐标,返回的是一个元组(top, left, width, height)
# 如果截图没找到,pyautogui.locateOnScreen()函数返回None
a = pyautogui.locateOnScreen(r'region_screenshot.png')
if a:
print("找到点击按钮")
else:
print("未找到点击按钮")
# 当需要被识别的图片,出现多个,可以用一下来识别过滤掉
# 匹配屏幕所有与目标图片的对象,可以用for循环和list()输出
for pos in pyautogui.locateAllOnScreen(r'region_screenshot.png'):
print(pos)
# 打印结果为Box(left=0, top=0, width=300, height=500)
a = list(pyautogui.locateAllOnScreen(r'region_screenshot.png'))
print(a) # 打印结果为[Box(left=0, top=0, width=300, height=500)]
以上就是pyautogui的简单操作,利用pyautogui这些方法来控制我们需要爬取的c/s架构客户端,能够正常的自动化操作,这是第一步操作 ,第二步操作采用AI技术来提取数据,完成数据采集。