其实很简单,访问一次,把input全部取出来,登录,访问校园卡,爬那一行就好了

有个小问题就是速度波动很大- -

快到3.3s,慢的有10s,不过不管哪个都很慢- -

#!/usr/bin/env python
# _*_ coding:utf-8 _*_
import requests
from bs4 import BeautifulSoup
from lxml import etree
import time


def query_card(username, password):
    r = requests.Session()
    headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) '
                             'Chrome/70.0.3538.102 Safari/537.36'}
    url = 'http://ids.xmu.edu.cn/authserver/login?service=http%3A%2F%2Fi.xmu.edu.cn%2F'
    html = r.get(url=url, headers=headers).text
    soup = BeautifulSoup(html, 'lxml')
    data = {
        'username': username,
        'password': password,
    }
    t = soup.find_all("input", attrs={'type': 'hidden'})
    for tag in t:
        data[tag.attrs['name']] = tag.attrs['value']

    r.post(url=url, headers=headers, data=data)
    url = 'http://i.xmu.edu.cn/?.pn=p967'
    html = r.get(url=url, headers=headers).text

    selector = etree.HTML(html)
    t = selector.xpath('//div[@id="pf1034"]/div/div[last()]/table/tr[3]/td/text()')
    return t[0]

    # soup = BeautifulSoup(html, 'lxml')
    # div = soup.find('div', attrs={'id': 'pf1034'})
    # div = div.find('div')
    # div = div.find_all('div')[-1]
    # table = div.find('table')
    # tr = table.find_all('tr')[2]
    # return tr.string


username = 'SWE16004'
# 初始密码为身份证后6位,或在迎新系统修改的密码
password = 'faQ'
start = time.time()
print(query_card(username, password))
print(time.time() - start)

 

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐