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)
复制此代码,只需填写如下信息即可
其中授权码通过以下方式获得,点击邮箱设置,启用POP3/SMTP服务,生成授权码
最后需要一台云服务器,部署上去持续运行即可。