前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python模拟登录青果教务系统

Python模拟登录青果教务系统

作者头像
yichen
发布2020-02-14 16:44:59
1.8K0
发布2020-02-14 16:44:59
举报
文章被收录于专栏:陈冠男的游戏人生

找了本书:《python网络数据采集》准备学一点 python 爬虫,记录一下学到的东西吧

详细知识就不说了,主要记录一下后面使用 webdriver 模拟登陆

需要有以下环境准备:

1、requests库

2、selenium库(版本在3.8.0,高了不支持phantonjs)

3、chromedriver(对应好谷歌浏览器版本,放在谷歌浏览器安装目录,然后把这个目录添加到环境变量)

代码部分:

代码语言:javascript
复制
from bs4 import BeautifulSoup
from selenium import webdriver
import requests
import time
from selenium.webdriver.common.keys import Keys
#这个库主要是用来模拟按键的

#browser=webdriver.PhantomJS(executable_path='D:/software/phantomjs-2.1.1-windows/bin/phantomjs')
#browser.get("http://jwxt.sdaeu.edu.cn/jwweb/home.aspx")
#为了验证,暂时不用无界

#chromeOptions = webdriver.ChromeOptions()
#chromeOptions.add_argument("--proxy-server=http://127.0.0.1:8080")
#给chrome设置代理

#browser = webdriver.Chrome(chrome_options = chromeOptions)
browser = webdriver.Chrome()
browser.get('http://jwxt.sdaeu.edu.cn/jwweb/home.aspx')
#打开chrome

time.sleep(2)
browser.switch_to_frame('frm_login')
#跳转表单,因为网页上有多个frame,每个都是独立的
#所以需要先找到登录用的那一个frame

browser.find_element_by_id("txt_sdertfgsadscxcadsads").click()
#要点一下才能出现更换验证码的链接

jpg=browser.find_element_by_id('imgCode')
img_src=jpg.get_attribute("src")
#拿到更换验证码url

#在这里应该使用browser的ASP.NET_SessionId的值
cookie_bro = browser.get_cookies()
#获取browser的cookie字典
#print(cookie_bro)
cookie1=cookie_bro[0]['value']
print("\n当前cookie为: "+cookie1)

headers1={
  'Host':'jwxt.sdaeu.edu.cn',
  'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36',
  'Accept':'image/webp,image/apng,image/*,*/*;q=0.8',
  'Referer':'http://jwxt.sdaeu.edu.cn/jwweb/_data/login_home.aspx',
  'Accept-Encoding':'gzip, deflate',
  'Accept-Language':'zh-CN,zh;q=0.9',
  'Cookie':'myCookie=;'+'ASP.NET_SessionId='+cookie1,
  'Connection':'close'
}
#header头要全一些,之前只用cookie请求还是不行

#proxy1={"http":"http://127.0.0.1:8080"}
#r=requests.get(img_src,headers=headers1,proxies=proxy1)
#requests使用代理

r=requests.get(img_src,headers=headers1)
img_content=r.content
print("[*]正在下载验证码...\n")
with open('check.jpg','wb') as f:
  f.write(img_content)

#提前填写学号和密码
browser.find_element_by_id("txt_asmcdefsddsd").send_keys("学号")
browser.find_element_by_id("txt_asmcdefsddsd").send_keys(Keys.TAB)
browser.find_element_by_id("txt_pewerwedsdfsdff").send_keys("密码")

#暂时需要手动输入
code = input("[*]请输入验证码: ")
browser.find_element_by_id("txt_sdertfgsadscxcadsads").send_keys(code)
browser.find_element_by_id("btn_login").click()

#browser.close()
#关闭浏览器

最后说一下验证码的事情:

当去访问教务处网站(简称网站)的时候,是没有 cookie 的

这时候会返回一个 cookie,“set_cookie”,服务器就是靠这个 cookie 知道是你的

当你去请求更换验证码的时候也是要带着这个 cookie 去请求,浏览器才能知道是你更换验证码,而不是一个新的访问者

而且 url 后面那个 ?t=208 参数,即使是相同的,返回的验证码也不是相同的

所以当你带着 cookie 去请求验证码的时候,实际上你应该输入的验证码,已经从浏览器上显示的,变成了请求之后下载下来的了

其实使用 webdriver 直接去请求链接也就不用管什么 cookie 了,毕竟一直就是那个浏览器,但是保存图片的时候有点编码之类的问题,也没解决就直接用 requests 了

另外,使用在 github 上其他人训练好的验证码识别模块整合了一下,但是识别率实在有点低

使用的识别模块

代码语言:javascript
复制
https://github.com/bieberg0n/jwgl-ocr

整理好的可以自动识别的代码:

代码语言:javascript
复制
https://github.com/yichen115/python-qgjwxt
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-01-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 陈冠男的游戏人生 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
验证码
腾讯云新一代行为验证码(Captcha),基于十道安全栅栏, 为网页、App、小程序开发者打造立体、全面的人机验证。最大程度保护注册登录、活动秒杀、点赞发帖、数据保护等各大场景下业务安全的同时,提供更精细化的用户体验。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档