当前位置: 首页 > 后端技术 > Python

Python盘纪念币系列之三:自动预约脚本编写01

时间:2023-03-26 14:29:45 Python

我们之前已经通过神经网络成功识别了验证码,本期可以开始编写自动预约脚本了。页面观察趁着近期可以预约鼠年纪念币,我们可以使用现成的预约界面进行观察:与之前的页面相比,当前页面的不同之处在于可以填写在保留数:别人没有反应之前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'}...}配置文件包含姓名、身份证号、手机号、位置信息和预约号。这些都是固定的信息,可以预先配置好,程序启动后会自动填入相应的位置。预约脚本编写在正式脚本编写之前,我们需要按照上一篇文章将验证码识别写成一个独立的功能块,以免造成代码混乱:defrecognize_capchar(capchar,model,lb):result=''image=cv2.imread(capchar,0)image=image[1:-1,1:-1]target_patches=get_cutted_pa??tches(image)fortarget_patchintarget_patches:image=cv2.resize(target_patch,(16,16))#缩放图像数据image=image.astype("float")/255.0image=np.expand_dims(image,axis=-1)#展平图像image=image.reshape((1,image.shape[0],image.shape[1],image.shape[2]))#预测preds=model.predict(image)#得到预测结果及其对应的labeli=preds.argmax(axis=1)[0]label=lb.classes_[i]result+=labelreturnresult自己尝试填写信息,然后点击提交发现这个网页没有可以直接提交预订信息的api,所以最好现在的做法是用selenium来进行自动化测试。创建浏览器对象为了演示清楚,这里使用Chrome进行测试。要运行此代码,您需要安装selenium。安装方法很简单:pipinstallselenium另外,我们还需要Chrome驱动。可以在网上搜索下载驱动,官网需要科学上网。需要注意的是,下载的驱动必须和Chrome的版本相匹配,然后将可执行文件存放在Path可以访问到的位置。准备工作做好后,创建浏览器对象就很简单了。只需要导入对应的包,然后新建一个对象:fromseleniumimportwebdriverdriver=webdriver.Chrome()效果如下:访问对应的url,由于每次预约的url不一样,所以需要定义提前预约的URL。然后使用浏览器对象访问,代码还是一样简单:url='https://eapply.abchina.com/coin/coin/********'driver.get(url)的效果如下:填写在输入信息这一步,网页其实和我们自己访问的时候没什么区别,只是我们需要在相应的格子里一一填写相应的信息,接下来就进行这个操作。首先,我们需要让程序知道在哪里填写下一个信息:ele_name=driver.find_element_by_xpath('//*[@id="name"]')这个//*[@id="name"]可能不知道是怎么来的,其实很简单。打开网页后,先根据蟒盘纪念币系列2:身份验证码01中的第二点找到小箭头,然后点击相应的输入框,在源代码窗口的相应位置右击右键,选择Copy->CopyXPath即可获取。获取位置后自然是填写信息,也很简单:ele_name.send_keys('name')会自动将“名字”填到对应的位置,其他固定信息(证件号,手机phonenumber,2020新年贺岁币(第一批)也是如此ToDo验证码处理下拉框处理日期处理后记篇幅有限,就先写到这里吧,下面的验证码处理,下拉框处理,日期处理等下一期继续介绍,敬请期待,本系列所有源码都放在下面的github仓库,有需要的可以参考,拜托有问题请指正,谢谢!https://github.com/TitusWongCN/AutoTokenAppointment下面将是本系列的最后一篇,主要内容包括验证码处理,下拉框处理,日期处理,敬请期待。第一期:蟒盘纪念币系列一:简介第二期:蟒盘纪念币系列二:鉴定验证码01第三期:蟒盘纪念币系列二:鉴定验证码02第四期:蟒盘纪念币系列二:鉴定验证码03第五期:蟒盘纪念币系列二:身份验证码04