模拟登录,获取投档状态信息
- 现在利用post请求去获取高考志愿的投档状态
# 模拟登录,获取投档状态
def spider(s, code):
url = 'http://zsxx.e21.cn/m/w/dataSearchPost.php'
data = {'cxIf': 'ok',
'ksh': '你的高考报名号',
'brithday': '你的出生年月',
'data_sjm': code # 验证码
}
# post请求数据
response = s.post(url, headers=headers, data=data)
response.encoding = 'utf-8'
# print(response.text)
lxml = etree.HTML(response.text)
pass_state = lxml.xpath("/html/body/div[1]/div[2]/ul/li[3]/text()")[0]
content = '日期:{}\n姓名: [你的名字]\n{}'.format(datetime.date.today().__format__("%Y-%m-%d"), pass_state)
return content
利用pushplus推送服务将信息发送至你微信
- 注册,利用手机微信扫码登录,关注该公众号(它会在这个公众号上发送信息给你)
- 选择一对一推送,一键复制token
- 可以使用get/post请求,有文档说明
- 我选用的是post请求,各种print只是为了好看
# 发送信息
def send(content):
send_url = 'http://www.pushplus.plus/send'
send_data = {
"token": "刚才复制的token",
"title": "今日高考投档结果", # 也可以自定义
"content": content, # 消息内容
}
response = requests.post(send_url, headers=headers, data=send_data)
response.encoding = 'utf-8'
result = json.loads(response.text)
print('今天您的高考投档情况查询成功,已推送至您微信,请注意查看!\n')
print('*'*33)
print('|本次推送结果:{}'.format(result["msg"]))
print('|本次消息推送流水号:{}'.format(result['data']))
print('*'*33)
全部代码
- gaokao.py (主文件)
#!/user/bin/python
import datetime
import json
from lxml import etree
import requests
from code_api import YdmVerify
headers = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) '
'Chrome/103.0.0.0 Safari/537.36'}
# 获取验证码
def get_code(s): # s -> 传入的参数,session会话
url = 'http://zsxx.e21.cn/m/h/dataSearch.html'
resp = s.get(url) # 用session会话去请求
html = etree.HTML(resp.text)
img_url = 'http://zsxx.e21.cn/' + html.xpath('//*[@id="gd_img"]/@src')[0].replace("../", '') # 利用xpath去获取验证码图片url
img_data = s.get(url=img_url, headers=headers).content # 还是必须用session会话去获取图片
# 不用保存到本地
# with open('./code.jpg', 'wb', ) as fp:
# fp.write(img_data)
# with open("code.jpg", 'rb') as f:
# img_content = f.read()
# 直接将session获取的img_data传给云码api
Y = YdmVerify()
code = Y.common_verify(img_data)
# print('验证码:'+code)
return code
# 模拟登录,获取投档状态
def spider(s, code):
url = 'http://zsxx.e21.cn/m/w/dataSearchPost.php'
data = {'cxIf': 'ok',
'ksh': '你的高考报名号',
'brithday': '你的出生年月',
'data_sjm': code # 验证码
}
# post请求数据
response = s.post(url, headers=headers, data=data)
response.encoding = 'utf-8'
# print(response.text)
lxml = etree.HTML(response.text)
pass_state = lxml.xpath("/html/body/div[1]/div[2]/ul/li[3]/text()")[0]
content = '日期:{}\n姓名: [你的名字]\n{}'.format(datetime.date.today().__format__("%Y-%m-%d"), pass_state)
return content
# 发送信息
def send(content):
send_url = 'http://www.pushplus.plus/send'
send_data = {
"token": "刚才复制的token",
"title": "今日高考投档结果", # 也可以自定义
"content": content, # 消息内容
}
response = requests.post(send_url, headers=headers, data=send_data)
response.encoding = 'utf-8'
result = json.loads(response.text)
print('今天您的高考投档情况查询成功,已推送至您微信,请注意查看!\n')
print('*' * 33)
print('|本次推送结果:{}'.format(result["msg"]))
print('|本次消息推送流水号:{}'.format(result['data']))
print('*' * 33)
def main():
# 创建一个Session会话,用于登录cookie操作
s = requests.Session()
print('开始获取今日的高考录取状态。。。')
code = get_code(s) # 获取验证码图片函数,返回验证码
content = spider(s, code) # 爬取信息函数
print('您的高考投档状态已获取,正准备推送至您微信。。。')
send(content) # 发送信息函数
if __name__ == "__main__":
main()
- code_api.py
import json
import requests
import base64
class YdmVerify(object):
_nom_url = "https://www.jfbym.com/api/YmServer/verifyapi"
_fun_url = "https://www.jfbym.com/api/YmServer/funnelapi"
_token = "" # 填用户中心秘钥
_headers = {
'Content-Type': 'application/json'
}
# 英文数字,中文汉字,纯英文,纯数字,任意特殊字符
def common_verify(self, image_content, verify_type="10101"):
# 请保证购买相应服务后请求对应 verify_type
# verify_type="10101" 单次积分
print(base64.b64encode(image_content).decode())
payload = {
"image": base64.b64encode(image_content).decode(),
"token": self._token,
"type": verify_type
}
resp = requests.post(self._nom_url, headers=self._headers, data=json.dumps(payload))
print(resp.text)
return resp.json()['data']['data']
# 通用滑块
def slide_verify(self, slide_image, background_image, verify_type="20101"):
# 请保证购买相应服务后请求对应 verify_type
# verify_type="20101" 单次积分
# slide_image 需要识别图片的小图片的base64字符串
# background_image 需要识别图片的背景图片的base64字符串(背景图需还原)
payload = {
"slide_image": base64.b64encode(slide_image).decode(),
"background_image": base64.b64encode(background_image).decode(),
"token": self._token,
"type": verify_type
}
resp = requests.post(self._nom_url, headers=self._headers, data=json.dumps(payload))
print(resp.text)
return resp.json()['data']['data']
# 点选,点选+额外参数
def click_verify(self, image, extra=None, verify_type=30001):
# 请保证购买相应服务后请求对应 verify_type
# verify_type="30001" 单次积分 点选
# verify_type="30002" 单次积分 点选+需要按某种语义点选
# 注意:
# 例如 :extra="请_点击_与小体积黄色物品有相同形状的大号物体。"
# 例如 :extra="请点击正向的大写V。"
# 例如 请依次点击 "鹤" "独" "剩" 这种 转换成:extra="鹤,独,剩"
# 例如 拖动交换2个图块复原图片 这种 转换成:extra="拖动交换2个图块复原图片"
# 如有其他未知类型,请联系我们
payload = {
"image": base64.b64encode(image).decode(),
"token": self._token,
"type": verify_type
}
print(base64.b64encode(image).decode())
if extra:
payload['extra'] = extra
payload['type'] = str(int(payload['type']) + 1)
resp = requests.post(self._nom_url, headers=self._headers, data=json.dumps(payload))
print(resp.text)
return resp.json()['data']['data']
# Hcaptcha
def hcaptcha_verify(self, site_key, site_url, verify_type="50001"):
# 请保证购买相应服务后请求对应 verify_type
# verify_type="50001"
payload = {
"site_key": site_key,
"site_url": site_url,
"token": self._token,
"type": verify_type
}
resp = requests.post(self._fun_url, headers=self._headers, data=json.dumps(payload))
print(resp.text)
return resp.json()['data']['data']
# 可删除
# if __name__ == '__main__':
# Y = YdmVerify()
# with open("../1.png", 'rb') as f:
# img_content = f.read()
# Y.common_verify(img_content)
导航
我在CSDN的第一篇文章——python+阿里云linux服务器每天定时发送高考投档状态到你手机微信(上)
我在CSDN的第一篇文章——python+阿里云linux服务器每天定时发送高考投档状态到你手机微信(下)