Python盘纪念币系列之三:自动预约脚本编写 01
前面我们通过神经网络成功的识别了验证码,这一期我们就可以开始编写自动预约脚本了。
页面观察
趁着近期可以预约鼠年纪念币,我们可以拿现成的预约界面来观察:
与前面给出过的一个页面相比,现在的页面不一样的是可以填写预约数量:
其他一些之前没有反应的UI也都有了该有的反应。
在这个基础上,我们就可以开始编写脚本了。
配置文件设计
既然要写脚本,必然是要做大量的重复性工作。在这里,就是要快速的输入多组信息来预约纪念币。所以,我们要提前把需要的数据按照一定的格式准备好,这样便于脚本运行时自动读取。下面是一个例子:
users = { 'name_1': { 'identNo': 'identNo_1', 'mobile': 'mobile_1', 'location': 'location_1', 'cardvalue0': 'cardvalue0_1' }, 'name_2': { 'identNo': 'identNo_2', 'mobile': 'mobile_2', 'location': 'location_2', 'cardvalue0': 'cardvalue0_2' }, 'name_3': { 'identNo': 'identNo_3', 'mobile': 'mobile_3', 'location': 'location_3', 'cardvalue0': 'cardvalue0_3' } ... }
配置文件中包含了姓名、身份证号码、手机号码、地点信息以及预约数量。这些都是固定信息,是可以提前配置好的,程序会在启动之后将这些信息自动填入对应的位置。
预约脚本编写
在编写正式脚本之前,我们需要根据前文先将验证码识别写成一个独立的功能块,以免造成代码混乱:
def recognize_capchar(capchar, model, lb): result = '' image = cv2.imread(capchar, 0) image = image[1:-1, 1:-1] target_patches = get_cutted_patches(image) for target_patch in target_patches: image = cv2.resize(target_patch, (16, 16)) # scale图像数据 image = image.astype("float") / 255.0 image = np.expand_dims(image, axis=-1) # 对图像进行拉平操作 image = image.reshape((1, image.shape[0], image.shape[1], image.shape[2])) # 预测 preds = model.predict(image) # 得到预测结果以及其对应的标签 i = preds.argmax(axis=1)[0] label = lb.classes_[i] result += label return result
尝试自己填写信息,然后点击提交之后发现,这个网页并没有可以直接提交预约信息的api,所以目前来看最好的做法,还是利用selenium
通过自动化测试的方式进行。
建立浏览器对象
为了能演示的清楚,这里采用Chrome
来测试。
想要能运行此代码,需要安装selenium
,安装方法很简单:
pip install selenium
另外,我们还需要Chrome
驱动。驱动大家可以在网上搜索下载,官网需要科学上网。要注意的是下载的驱动要跟Chrome
的版本匹配,然后将可执行文件存放在Path
可以访问到的位置。
准备工作做好后,建立浏览器对象就很简单了,只需要引入对应的包,然后新建对象即可:
from selenium import webdriver driver = webdriver.Chrome()
效果如下:
访问对应的网址
由于每次预约的网址都不一样,所以需要提前定义好本次预约的网址。然后利用浏览器对象去访问它,代码还是一样的简单:
url = 'https://eapply.abchina.com/coin/coin/*******' driver.get(url)
效果如下:
填入信息
到这一步,网页其实跟我们自己访问时没有什么区别,只是需要把对应的信息一一填入对应的格子里,那我们接下来就来做这件事。
首先,我们需要让程序知道下一个信息要填写到哪里:
ele_name = driver.find_element_by_xpath('//*[@id="name"]')
这个//*[@id="name"]
可能不知道是怎么来的,其实很简单。打开网页之后,先按照Python盘纪念币系列之二:识别验证码 01中的第二点找到小箭头,然后点击对应的输入框,在右侧源代码窗口对应位置右键,选择Copy -> Copy XPath
即可获得。
获取到位置之后自然就是要把信息填写进去,也是相当简单:
ele_name.send_keys('姓名')
这样就实现自动把“姓名”填写到对应的位置了,其他固定信息(证件号码、手机号码、
2020年贺岁币(第一批))也是同样的道理。
ToDo
- 验证码处理
- 下拉框处理
- 日期处理
后记
限于篇幅,这里就先只写到这里,接下来的 验证码处理、下拉框处理、日期处理 会在下一期继续介绍,敬请期待。
本系列的所有源代码都会放在下面的github仓库里面,有需要可以参考,有问题欢迎指正,谢谢!
https://github.com/TitusWongCN/AutoTokenAppointment
接下来的会是本系列的最后一篇,主要内容包括验证码处理、下拉框处理、日期处理 ,敬请期待。
原文地址:https://segmentfault.com/a/1190000021589425
相关推荐
-
python2.7+wxpython4.0.1+pyinstaller打包的正确用法 python基础
2019-8-25
-
PyQt:自定义QLineEdit禁止选中复制粘贴 python基础
2019-6-30
-
Python基础之注释,算数运算符,变量,输入和格式化输出 python基础
2019-9-11
-
Python函数编程——返回值与作用域 python基础
2019-9-17
-
Python元组拆包和具名元组解析 python基础
2018-2-20
-
华为的测试大牛Python+Django接口自动化怎么写的? python基础
2020-5-31
-
Python的魔法函数 python基础
2019-9-18
-
小哥哥我想.. 把报警信息发到微信 python基础
2019-8-26
-
那些有趣/用的 Python 库 python基础
2019-4-27
-
Polysh命令实现多日志查询 python基础
2019-8-23