欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Python自动查询考研成绩并发送到邮箱

程序员文章站 2022-04-09 13:10:04
...

声明:本人原创,搬运自本人知乎。

使用selenium模拟浏览器操作,判断有无出成绩,若出则截图发送到邮箱。

代码如下:

import smtplib
import time
from email.mime.image import MIMEImage
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from selenium import webdriver

'''
code : 学校代码,例如清华是10003
name : 你的名字
sfz : 身份证号码
zkz : 准考证号
address : list类型,要发生到哪些邮箱
'''


def chaxun(code, name, sfz, zkz, address):
    url = 'https://yz.chsi.com.cn/apply/cjcx/t/' + code + '.dhtml'
    options = webdriver.ChromeOptions()
    options.add_argument('-no-sandbox')
    options.add_argument('--disable-dev-shm-usage')
    options.add_argument('--headless')
    options.add_argument('--disable-gpu')
    browser = webdriver.Chrome(chrome_options=options)
    try:
        browser.get(url)
        input_name = browser.find_element_by_xpath('//*[@name="yzwb_xm"]')
        input_name.send_keys(name)
        input_sfz = browser.find_element_by_xpath('//*[@name="yzwb_zjhm"]')
        input_sfz.send_keys(sfz)
        input_zkz = browser.find_element_by_xpath('//*[@name="yzwb_ksbh"]')
        input_zkz.send_keys(zkz)
        button = browser.find_element_by_xpath('//*[@type="button"]')
        button.click()
        time.sleep(3)
        res = browser.get_screenshot_as_file('result_' + name + '.png')
        try:
            result = browser.find_element_by_class_name('cjcx-noresult')
            if result.text == '请检查您报考的招生单位是否已开通初试成绩查询功能':
                #send_email(name, address)
                return False
        except:
            send_email(name, address)
            return True
    except:
        print('Error!')
    finally:
        browser.close()

def send_email(name, address):
    try:
        from_addr = 'from_email' #从哪个邮箱发出,可以填自己的
        password = 'kouling' #授权码
        msg = MIMEMultipart()
        msg['Subject'] = '考研成绩'
        msg['To'] = ';'.join(address)
        msg['From'] = from_addr
        body = """
            <h3>您好!</h3>
            <p>您的考研成绩已出,请查看</p>
            <p>
            <br><img src="cid:image1"></br> 
            </p>
            """
        content = MIMEText(body, _subtype='html', _charset='utf8')
        msg.attach(content)
        fp = open('result_' + name + '.png', 'rb')
        images = MIMEImage(fp.read(), _subtype='octet-stream')
        fp.close()
        images.add_header('Content-ID', '<image1>')
        msg.attach(images)
        server = 'smtp.qq.com'
        server = smtplib.SMTP_SSL(server, 465)
        server.set_debuglevel(1)
        server.login(from_addr, password)
        server.sendmail(from_addr, address, msg.as_string())
    except Exception as e:
        print(str(e))
        print('发邮件错误')
        return False
    return True


if __name__ == '__main__':
    while 1:
        res = chaxun('code', 'name', 'sfz', 'zkz', ['email']) #填写你自己的学校代码,姓名,身份证号码,准考证号,邮箱
        if res:
            print('查询成功!')
            break
        else:
            print('成绩尚未出!')
        time.sleep(60)

复制此代码,只需填写如下信息即可

Python自动查询考研成绩并发送到邮箱

Python自动查询考研成绩并发送到邮箱

其中授权码通过以下方式获得,点击邮箱设置,启用POP3/SMTP服务,生成授权码

Python自动查询考研成绩并发送到邮箱

最后需要一台云服务器,部署上去持续运行即可。

相关标签: python