脚本编写
# 脚本的编写
举个简单的例子 背景: 某平台预约茅台程序,5000个账号
流程:
1.循环5000个账号
2.获取每个手机号
3.滑动验证
4.发送短信
5.登陆
6.获取实名信息&资格
7.预约,预约码
注意事项:
1> 若要写脚本,第一步写.
def run():pass
if __name__ == "__main__":
run()
2> 打开文件单独写个函数,返回生成器对象
3> 5000个账号使用 10个多线程, 10个10个的并发执行任务
4> 特别注意,若使用多线程的话,在执行的任务中切记加上 try..except..
若不加,在线程池中遇到错误,它就直接忽略了!程序也不会报任何错.
5> 在task函数中依次执行业务的 滑动验证、发送短信、登陆
若某一步失败了,就不往下面走了,但需要记录一条日志!!
6> <若涉及到网络IO>,让它重试几次,都出错了,就返回False
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
代码框架如下:
from concurrent.futures import ThreadPoolExecutor
def geetest():
"""实现滑动验证"""
try:
# ... 写具体的业务代码
return True, 123 # 成功后返回 True和想要的结果
except Exception as e:
return False, str(e) # 出错了返回 False和错误的信息
def send_sms():
"""发送短信 <若涉及到网络IO>,让它重试几次,都出错了,就返回False"""
for i in range(5):
try:
# 发送短信
return True, 123
except Exception as e:
print(str(e))
return False, "短信发送异常了"
def login():
"""登陆 若你保证程序没问题,就是因为网络的原因,那就死循环,直到成功"""
while True:
try:
return True, 123
except Exception as e:
print(str(e))
def task(mobile, pwd):
try:
# 1.滑动验证 2.发送短信 3.登录
func_list = [geetest, send_sms, login]
for func in func_list:
status, data = func()
if not status:
# ... 记录错误日志 eg:"mobile+pwd+data_or_error + 滑动验证"
# 表明该步骤报错了,return不继续往下走,但需要记录错误记录
return
except Exception as e:
print("异常", e) # 记录下来
def read_file():
"""读取文件"""
# 假设文件中,每一行是 手机号,密码
with open('account.txt', mode='r', encoding='utf-8') as f:
for line in f:
line = line.strip()
mobile, pwd = line.split(',')
# 并不会将循环结果放到列表中返回,而是返回一个生成器
yield mobile, pwd
def run():
pool = ThreadPoolExecutor(10) # 线程池中维护10个线程
gen = read_file()
for mobile, pwd in gen:
pool.submit(task, mobile, pwd)
pool.shutdown() # 主线程等待
print("--5000个任务全部执行完毕--")
if __name__ == '__main__':
run()
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70