这篇文章主要介绍了抢九价hpv是否有软件,具有一定借鉴价值,需要的朋友可以参考下。希望大家阅读完这篇文章后大有收获,下面让小编带着大家一起了解一下。
大家好,给大家分享一下抢九价hpv是否有软件,很多人还不知道这一点。下面详细解释一下用python绘制一个笑脸。现在让我们来看看!
前些天留意到我妈一直在预约四价疫苗都约不上,就想着写个程序来模拟人的操作去点击,判断疫苗是否被抢完,无限循环去刷新这个页面,一旦疫苗可预约就立马抢下来选择时间接种人。当预约成功后就语音循环播报:已经抢到,赶紧过来看一下python建议自学吗。
基于以上的想法和需求,我花了半小时编辑了以下代码,并在一小时内成功预约。
import pyautogui
from ctypes import * # 获取屏幕上某个坐标的颜色
from time import sleep
import time
start = time.time()
def get_color(x, y):
gdi32 = windll.gdi32
user32 = windll.user32
hdc = user32.GetDC(None) # 获取颜色值
pixel = gdi32.GetPixel(hdc, x, y) # 提取RGB值
r = pixel & 0x0000ff
g = (pixel & 0x00ff00) >> 8
b = pixel >> 16
return [r, g, b]
print(get_color(297,454))
while True:
if get_color(240 , 255) == [60,211,180] or get_color(247,255) == [60,211,180] or get_color(253,255) == [60,211,180] or get_color(260,255) == [60,211,180] or get_color(270,255) == [60,211,180] or get_color(280,255) == [60,211,180] or get_color(290 ,255) == [60,211,180] or get_color(300 ,255) == [60,211,180] or get_color(310,255) == [60,211,180] or get_color(320, 255) == [60,211,180]:
pyautogui.click(310,255)#点进去抢
sleep(0.5)
pyautogui.click(467,262)#选择预约时间
while True:
if get_color(297,454) == [0,142,255]:
break
else:
sleep(0.3)
sleep(0.5)
pyautogui.click(498,454)#点击下午
sleep(0.5)
pyautogui.click(467,520)#选择时间
sleep(0.5)
pyautogui.click(470,899)#点选好了
sleep(0.5)
pyautogui.click(470, 899)#点立即预约
#sleep()
break
else:
pyautogui.click(123,60)
sleep(0.8)#刷新
print('总耗时:'.format(time.time()-start))
print(time.strftime('%Y-%m-%d %H:%M:%S', time.localtime()))
while 1:
import pyttsx3
engine = pyttsx3.init()
engine.say('我抢到了!快来看一下')
engine.runAndWait()
sleep(1)
实现思路大致流程图:
可以看到逻辑非常简单即可实现我想要的功能,不过即使是这样,我也花了差不多半小时的时间来编写代码。于是我就在想,要是以后我要开发抢票、技能连招啊、信息轰炸朋友啊等等的功能,是不是也要这么多时间呢,那我能不能自己造轮子来快速帮助我开发我想要的脚本呢。
至此,此章的内容正式开始了。
我将一步一步带着读者来开发这个快速开发自定义连点器的程序(有一点点拗口)
目录
整体思路:
一般需要的功能有:点击、延时、连点、拖拽。一般这四个功能就能完成绝大多数的简单的辅助脚本开发了,但我想做得稍微高级一点,功能多一点,就想另外开发:循环、判断、模拟按键、文本输入、存储操作、读取操作的功能。
那么我们就要朝着我们想要实现的九大功能来开发:循环、点击、延时、连点、拖拽、判断、模拟按键、文本输入、存储操作、读取操作。
首先就是希望我的每一步操作都会被程序记录下来并执行,我们可以定义一个列表来存储每一个操作,列表中的每一个元素就是每一步的操作,然后遍历这个列表来读取并执行每一个操作就可以将一整个操作全部执行。
当我的每一步操作都输入完毕后,我都希望程序能自动帮我把程序存储下来方便我下一次使用,这样下次使用就不用再编译多一次了。
每一个列表的第0项就是需要操作的功能,第0项之后都是各种参数。
所有功能
简单演示
点击功能
要想电脑帮我们点击,首先要告诉电脑我要点击的位置在哪里。想要获取鼠标位置就需要用到pyautogui库,这个库下有个position()方法可以返回鼠标位置的X坐标,Y坐标。
也可以参考一下我之前的文章:实时获取鼠标位置_晋升阁的博客-CSDN博客_实时显示鼠标坐标
定义获取位置函数
import pyautogui
def get_xy():
x, y = pyautogui.position()
return [x,y]
用面向对象思想来简化程序,提高代码复用率,使程序可读性更高,是python开发的重要思想之一哦
pyautogui库还有非常多常见功能,感兴趣的可以翻看我之前写的博客:像selenium一样操作电脑,保姆式教学——速成篇_晋升阁的博客-CSDN博客
点击功能代码如下
step=[]
while True:
choose = input('请输入你需要使用的功能:')
if choose == '点击':
click = []
while 1:
click_dongzuo = input('请移动鼠标到目标位置上输入“1”完成动作,输入“0”取消动作')
if click_dongzuo == '1':
click_weizhi = get_xy()
click.append('点击')
click.append(click_weizhi)
step.append(click)
break
elif click_dongzuo == '0':
print('操作已取消')
break
else:
print('请输入正确的操作(输入“0”或“1”')
执行时的逻辑:
for i in step1:
if i[0] == '点击':
x = int(i[1][0])
y = int(i[1][1])
print(f'{x},{y}')
pyautogui.click(x,y)
记录点击需要记录点击功能、位置参数生成一个列表,然后将列表append到step总列表中去
延时功能
使用到了python内置库中的time模块,可以使程序强制停止相应时间。将参数生成列表append到step总列表中去
if choose =='延时':
while 1:
timerr = []
try:
timex = int(input('请输入延时时间:'))
timerr.append('延时')
timerr.append(timex)
step.append(timerr)
break
except:
print('延时失败/n请输入正确的延时时间')
continue
执行时的逻辑:
def timer(timex):
time.sleep(timex)
if i[0] == '延时':
t = int(i[1])
timer(t)
连点功能
有些简单的页面可以通过连点来实现抢票等功能,这个功能必不可少
记录这个动作的必要参数有连点功能记录、点击频率参数、通过连点次数完成动作还是通过连点时长完成动作。
同样是调用了获取鼠标位置的函数,
if choose == '连点':
click_liandian = []
while 1:
click_dongzuo = input('请移动鼠标到目标位置上输入“1”完成动作,输入“0”取消动作')
if click_dongzuo == '1':
click_weizhi = get_xy()
click_liandian.append('连点')
click_liandian.append(click_weizhi)
break
elif click_dongzuo == '0':
print('操作已取消')
break
else:
print('请输入正确的操作(输入“0”或“1”')
click_pinlv = float(input('请输入连点频率:'))
while 1:
click_stop_choose = input('“连点次数”or“连点时长”')
if click_stop_choose =='连点次数':
click_cishu = int(input('请输入连点次数:'))
click_liandian.append('连点次数')
click_liandian.append(click_cishu)
click_liandian.append(click_pinlv)
step.append(click_liandian)
print(click_liandian)
print(step)
break
if click_stop_choose == '连点时长':
click_shichang = int(input('请输入连点时长(秒):'))
click_liandian.append('连点时长')
click_liandian.append(click_shichang)
step.append(click_liandian)
click_liandian.append(click_pinlv)
print(click_liandian)
print(step)
break
else:
continue
执行时的逻辑:
if choose == '连点':
click_liandian = []
while 1:
click_dongzuo = input('请移动鼠标到目标位置上输入“1”完成动作,输入“0”取消动作')
if click_dongzuo == '1':
click_weizhi = get_xy()
click_liandian.append('连点')
click_liandian.append(click_weizhi)
break
elif click_dongzuo == '0':
print('操作已取消')
break
else:
print('请输入正确的操作(输入“0”或“1”')
click_pinlv = float(input('请输入连点频率:'))
while 1:
click_stop_choose = input('“连点次数”or“连点时长”')
if click_stop_choose =='连点次数':
click_cishu = int(input('请输入连点次数:'))
click_liandian.append('连点次数')
click_liandian.append(click_cishu)
click_liandian.append(click_pinlv)
step.append(click_liandian)
print(click_liandian)
print(step)
break
if click_stop_choose == '连点时长':
click_shichang = int(input('请输入连点时长(秒):'))
click_liandian.append('连点时长')
click_liandian.append(click_shichang)
step.append(click_liandian)
click_liandian.append(click_pinlv)
print(click_liandian)
print(step)
break
else:
continue
存储功能
当我们记录完所有操作后我们希望将操作保存下来方便下次使用,不需要从头录入。
这将生成一个与py脚本同级的txt文件,txt文件中保存了所有的步骤,可直接读取使用
if choose =='存储':
if len(step) == 0:
print('还未记录你任何操作,请添加操作再使用存储功能')
else:
do_name = input('请为以上操作命名吧:')
path = r"{}.txt".format(do_name)
with open(path, "w",encoding = 'utf8') as f:
f.write(str(step))
读取功能
这一步呢就稍微麻烦一点,因为txt没办法记录list类型的数据,只能以str类型写出去并且只能以str类型读取进来。我自己定义了一些函数来转化为list类型,比较复杂,就不再说明函数是怎么实现的,日后有机会再跟各位分享。
def writeList2txt(file,data):
'''
将list写入txt
:param data:
:return:
'''
file.write(str(data))
def readListFromStr(str):
'''
str -> List
除去冗余的方法调用
:param str:
:return:
'''
res,pos = help(str,1)
res1=[]
a ='1'
for ii in res:
iii=[]
for i in ii:
if type(i)==type(a):
i = i.replace("'", "")
iii.append(i)
else:
iii.append(i)
res1.append(iii)
return res1
def help(str,startIndex):
'''
单行字符串的读取,形成list
:param str:
:return:
'''
str = str.replace(" ","") # 将所有空格删去
res = []
i = startIndex
pre = startIndex
while i <len(str):
if str[i] == '[':
# 将pre-i-2的字符都切片,切split
if i-2>=pre:
slice = str[pre:i-1].split(',')
for element in slice:
res.append(element)
# 递归调用 加入子list
child,pos = help(str,i+1)
res.append(child)
i = pos # i移动到pos位置,也就是递归的最后一个右括号
pre = pos + 2 # 右括号之后是, [ 有三个字符,所以要+2至少
elif str[i] == ']':
# 将前面的全部放入列表
if i-1>=pre:
slice = str[pre:i].split(',')
for element in slice:
res.append(element)
return res,i
i = i + 1
return res,i
def get_caozuo(caozuopath):
with open(caozuopath , 'r' , encoding='utf8') as f:
data = f.read()
return data
def get_caozuo_name():
files1 = []
file_dir = r"C:\Users\ge\Desktop\test1\我的作品\自定义连点器"
for root, dirs, files in os.walk(file_dir, topdown=False):
files = files[:-1]
for i in files:
files1.append(i[:-4])
return files1
print(get_caozuo_name())
if choose == '循环执行':
caozuojiyi = get_caozuo_name()
while True:
xunhuan_choose = input('已存储的操作有:{}\n请输入循环操作的操作名:'.format(caozuojiyi))
if xunhuan_choose in caozuojiyi:
break
else:
print('存储库中并无你想要的操作,请重新输入:')
存储导入功能【升级版】
上面的功能只能把二维的列表导入成list类型的数据类型,不利于后面的导入。一旦存储或导入的列表达到三维或以上就不适用了。后来我在网上搜了半天,终于发现json库里面有方法支持以list的形式导出txt并且可以以list的方式读取。以下是我实现存储导入的逻辑代码:
导入(功能实现)
def txttolist(path):
import json
b = open(path, "r", encoding='UTF-8')
out = b.read()
out = json.loads(out)
return out
导入(逻辑代码)
如果程序内存里已有操作了将提示保存
if choose == '导入':
if len(step) == 0:
step = daoru()[0]
else:
baocun_choose = input('此次操作若未保存请先,导入别的操作会覆盖原来的操作,你确定要导入吗?\n请输入“yes”or“no”:\n')
while 1:
if baocun_choose == 'no':
break
if baocun_choose == 'yes':
print('你已取消保存')
step = daoru()[0]
break
else:
yorn = input("请输入'yes'or'no':\n")
存储(功能实现)
def cunchu():
yorn = input("执行完毕,是否保存?\n输入'yes'or'no'\n")
while 1:
if yorn == 'yes':
if len(step) == 0:
print('还未记录你任何操作,请添加操作再使用存储功能')
else:
do_name = input('请为以上操作命名吧:')
path = r"{}.txt".format(do_name)
listtotxt(list=step, path=path)
break
if yorn == 'no':
print('你已取消存储')
break
else:
yorn = input("请输入'yes'or'no':\n")
def listtotxt(list, path):
import json
c_list = list
c_list = json.dumps(c_list)
'''将c_list存入文件
'''
a = open(path, "w", encoding='UTF-8')
a.write(c_list)
a.close()
print('已存入txt')
存储(逻辑代码)
要是程序内存里还没有操作将提醒
if choose == '存储':
if len(step) == 0:
print('还未记录你任何操作,请添加操作再使用存储功能')
else:
do_name = input('请为以上操作命名吧:')
path = r"{}.txt".format(do_name)
listtotxt(list=step, path=path)
拖拽功能
这个功能也是基于pyautogui库来使用的,主要用到了pyauto