亲自动手,用Python刷雅思考位
admin
2023-07-30 20:43:50
0

一个月前开始准备雅思考试,计划等题刷得差不多了之后,挑一场时间合适离家近的考试报名。前几天去了趟外地忘了报名的事儿,结果今天打开报名网站一看才发现已经过了八月份前三场的报名deadline,只剩29号一场。更头疼的是29号的所有考场都写着名额暂满,没有考位了。

果断百度一下,有人说每天早上六点早起开刷,怕一直刷下去键盘上花键+R两个键受不了。亲自动手不行就把这个任务outsource出去吧,结果淘宝了一下代刷考位报价几百块外加上交用户名密码,为了考个试把用户名密码身份证住址全泄漏出去,成本恐怕太高。如此只好撸撸袖子,亲自动手丰衣足食~

首先去雅思报名的网站上看了一眼。登陆http://ielts.etest.edu.cn/,点左侧的考位查询,打开Chrome的开发者工具箱,随便查了一下下个月北京的考位,在Network里抓到了JSON的URL:

http://ielts.etest.edu.cn/myHome//queryTestSeats?queryMonths=2015-08&queryProvinces=11&neeaAppId=&productId=IELTSPBT

心乐之,于是在JS Console里调戏了半天,但总在JS刷新过后遇到瓶颈。果断换Python,世界清爽,代码如下:

#coding=utf-8

#编码字符集

Month=\’2015-08\’

# 11: Beijing

# 44: Guangdong

Province=\’11\’ 

UID=\’12345678\’

#配置月份、城市和账号的UID,依照JSON URL的格式。

#月份可以查询一个月的比如 2015-08 或两个月的如 2015-08%2C2015-09

#城市代码 11是北京,44是广东

sessiondict={}

sessiondict[\’BIGipServerhw_ielts_internal_pool\’]=\'<…>\’

sessiondict[\’JSESSIONID\’]=\'<…>\’

sessiondict[\’_ga\’]=\'<…>\’

# Configure your cookie here

#因为JSON的调用需要浏览器预先登陆验证,所以这里需要配置好Cookie伪装成用户浏览器中的点击。具体的Cookie键值登录后在开发者工具里找

sessiondict[\’domain_name_edu\’]=\’ielts.etest.edu.cn\’

sessiondict[\’domain_name_net\’]=\’ielts.etest.net.cn\’

sessiondict[\’domain_port_http\’]=\’80\’

sessiondict[\’domain_port_https\’]=\’443\’

sessiondict[\’locale\’]=\’zh_CN\’

#无需配置的Cookie键

import requests

#依赖包

def getHtml(url):

user_agent = ( \’Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko/20100101 Firefox/22.0\’ )

global sessiondict

session = requests.session()

session.headers[\’User-Agent\’] = user_agent

session.headers[\”Connection\”] =\”close\”

session.cookies.update(sessiondict)

r=session.get(url)

return r.content

#function getHtml 抓取JSON

def main():

global Month

global UID

global Province

html = getHtml(\”http://ielts.etest.edu.cn/myHome/%s/queryTestSeats?queryMonths=%s&queryProvinces=%s&neeaAppId=&productId=IELTSPBT\”%(UID,Month,Province))

html=html.replace(\’null\’,\’None\’)

a=eval(html)

for each in a:

for i in a[each]:

if i[\’optStatusEn\’]==\”No Seat\”:

print \’\\033[1;37;41m \’,i[\’optStatusEn\’],\’ \\033[0m-\’,i[\’adminDate\’],\’-\’,i[\’centerNameEn\’]

else:

print \’\\033[1;37;42m\’,i[\’optStatusEn\’],\’\\033[0m-\’,i[\’adminDate\’],\’-\’,i[\’centerNameEn\’]

# function main 主函数,把结果打印在屏幕上,\\033[… 用到Console里的颜色和字体属性

main()

#程序入口,到此代码完毕

按需修改开头标志的参数之后,在终端运行python main.py即可,程序会自动返回查询的考位状态。至此还需按照自己的需求添加循环和提醒功能。循环非常简单,提醒的机制包括Sina App Engine的短信提醒、连接Weibo API发微博之类,一旦发现有考场从 No Seat 变成 Book Seat 就及时发出提醒,赶快去交钱报名。

BTW,简书吃掉Python的缩进,从这里复制的代码还需自己理清下逻辑打打Tab。

源代码已送上GitHub,在这里也可找到:

https://github.com/DuPupu/Get-IELTS-Seat-CN

最后祝大家早日抢到考位,烤鸭愉快~

相关内容

热门资讯

Mobi、epub格式电子书如... 在wps里全局设置里有一个文件关联,打开,勾选电子书文件选项就可以了。
500 行 Python 代码... 语法分析器描述了一个句子的语法结构,用来帮助其他的应用进行推理。自然语言引入了很多意外的歧义,以我们...
定时清理删除C:\Progra... C:\Program Files (x86)下面很多scoped_dir开头的文件夹 写个批处理 定...
scoped_dir32_70... 一台虚拟机C盘总是莫名奇妙的空间用完,导致很多软件没法再运行。经过仔细检查发现是C:\Program...
65536是2的几次方 计算2... 65536是2的16次方:65536=2⁶ 65536是256的2次方:65536=256 6553...
小程序支付时提示:appid和... [Q]小程序支付时提示:appid和mch_id不匹配 [A]小程序和微信支付没有进行关联,访问“小...
pycparser 是一个用... `pycparser` 是一个用 Python 编写的 C 语言解析器。它可以用来解析 C 代码并构...
微信小程序使用slider实现... 众所周知哈,微信小程序里面的音频播放是没有进度条的,但最近有个项目呢,客户要求音频要有进度条控制,所...
Apache Doris 2.... 亲爱的社区小伙伴们,我们很高兴地向大家宣布,Apache Doris 2.0.0 版本已于...
python清除字符串里非数字... 本文实例讲述了python清除字符串里非数字字符的方法。分享给大家供大家参考。具体如下: impor...