上次写的半成品用的是urllib库直接提交post表单,但是现在不可用了,主要是post请求的字段里,新添了几个不知道的值,而且密码采用的加密是ase128,我是懒的去实现。
正好试一下selenium,selenium是一个很好的用于自动化测试的模块,可以直接调动浏览器,模拟人的输入点击等操作,而且非常简单易用,但是效率相对而言就低一些,因为很多操作要等页面元素加载出来才可以找到。
这次不仅写了脚本,还搭建了一个网站,接受预定,并且写入数据库,每天早上08:01执行预约脚本,有兴趣的或者需要的同学可以看这里,http://116.62.5.101:8000,
后面会再写一篇文章,介绍如何在服务器上部署基于flask网站,数据库,selenium、tesseract4.0、无界面的chrome浏览器和chromdriver。
selenium最核心的使用方法就是使用选择器找到页面的相应的元素作为对象,例如:
bro是一个selenium中webdriver的一个浏览器对象,可以使用find_element_by的方法,通过name,id,class找到元素,
如果这些都没有的元素,可以使用xpath,xpath有兴趣的小伙伴可以去详细了解一下,不过最简单的方法就是F12打开开发者模式之后,右键响应的元素就可以copy它的Xpath。
tesseract 是一个识别引擎,用于识别验证码
import pymongo
import schedule
import time
import pytesseract
from PIL import Image
from multiprocessing import Pool
from bson import ObjectId
from selenium import webdriver
import datetime
import random
import os
def addmates(matesid,framenum,bro):
button_addmates = bro.find_element_by_id("handle-add")
button_addmates.click()
bro.switch_to.frame("xubox_iframe"+str(framenum))
input_matesid = bro.find_element_by_id("cardNo")
input_matesid.send_keys(matesid)
button_findmate = bro.find_element_by_class_name("search-id")
button_findmate.click()
input_existmates = bro.find_elements_by_class_name("user")
oldcontacts = []
for input_existmate in input_existmates:
# print(input_existmate.get_attribute("textContent"))
oldcontacts.append(input_existmate.get_attribute("textContent").strip())
time.sleep(1)
# print(bro.page_source)
input_newcontact = bro.find_element_by_id("contact")
# print(input_newcontact.