我在CSDN的第一篇文章——python+阿里云linux服务器每天定时发送高考投档状态到你手机微信(中)

模拟登录,获取投档状态信息

  • 现在利用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推送服务将信息发送至你微信

  1. 注册,利用手机微信扫码登录,关注该公众号(它会在这个公众号上发送信息给你)
  2. 选择一对一推送,一键复制token
    在这里插入图片描述
  3. 可以使用get/post请求,有文档说明
  4. 我选用的是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服务器每天定时发送高考投档状态到你手机微信(下)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值