Python模拟登录教务网(以沈大教务网为例)

#Python模拟登录教务网(!附源码!)#
一:使用selenium 库调用谷歌浏览器

from selenium import webdriver
driver = webdriver.Chrome()
driver.maximize_window()
driver.get('http://sdjwxt.syu.edu.cn/jsxsd/')

二:抓取Xpath使用send_key方法自动填充账号密码

#自动输入账号与密码
driver.find_element_by_xpath('//*[@id="userAccount"]').send_keys('F1659128')
driver.find_element_by_xpath('//*[@id="userPassword"]').send_keys(password.PW)

如图所示抓取Xpath:
在这里插入图片描述
三:验证码的获取以及转化
1.首先截取全屏为图片a
2.利用验证码的XPath获取其坐标以及长短
3.根据坐标截取验证码图片为图片b
4.处理图片b,然后利用pytesseract库将其转化为数字
#截取屏幕
driver.save_screenshot(‘a.png’)

#得到验证码的坐标
y_element =driver.find_element_by_xpath('//*[@id="SafeCodeImg"]')
print(y_element.location)
print(y_element.size)
#截取验证码图片
left = y_element.location['x']
top = y_element.location['y']
right = left + y_element.size['width']
button = top + y_element.size['height']
im = Image.open('a.png')
im = im.crop((left,top,right,button))
im.save('b.png')
#识别验证码
text = Image.open('c.png')
result = pytesseract.image_to_string(text)
resultj = re.sub(u"([^\u4e00-\u9fa5\u0030-\u0039\u0041-\u005a\u0061-\u007a])", "", result)  # 去除识别出来的特殊字符
result_four = resultj[0:4]  # 只获取前4个字符
print(resultj)

最终将转化的验证码填入并点击登陆即可!

driver.find_element_by_xpath('//*[@id="RANDOMCODE"]').send_keys(resultj)
driver.find_element_by_xpath('//*[@id="ul1"]/li[5]/button').click()

run登陆成功!
在这里插入图片描述
说说遇到的坑:
1.安装pycharm的时候没理解解释器,在后来的导包时遇到一些列问题
避坑指南:https://www.runoob.com/w3cnote/pycharm-windows-install.html
2.命令行pip install 包时无法下载
避坑指南:https://blog.csdn.net/weay/article/details/82261442
3.验证码转数字精确度未达到80%,有待于改善。
4.Pytesseract 图像验证码识别 PyCharm 报错FileNotFoundError
避坑指南:https://blog.csdn.net/u010134642/article/details/78747630
大概就这些吧,下一步爬成绩保存至文档!python新手,大家多多交流!
完整代码:

#pip selenium  安装对应的谷歌驱动放在python目录下,自动打开谷歌浏览器并访问网址
from selenium import webdriver
import password
import re
#验证码图片转文字
import pytesseract
#图形化处理库
from PIL import Image
driver = webdriver.Chrome()
driver.maximize_window()
driver.get('http://sdjwxt.syu.edu.cn/jsxsd/')
#自动输入账号与密码
driver.find_element_by_xpath('//*[@id="userAccount"]').send_keys('F1659128')
driver.find_element_by_xpath('//*[@id="userPassword"]').send_keys(password.PW)
#截取屏幕
driver.save_screenshot('a.png')
#得到验证码的坐标
y_element =driver.find_element_by_xpath('//*[@id="SafeCodeImg"]')
print(y_element.location)
print(y_element.size)
#截取验证码图片
left = y_element.location['x']
top = y_element.location['y']
right = left + y_element.size['width']
button = top + y_element.size['height']
im = Image.open('a.png')
im = im.crop((left,top,right,button))
im.save('b.png')
#图片处理
img = Image.open('b.png')
img = img.convert('L')  # P模式转换为L模式(灰度模式默认阈值127)
count = 165  # 设定阈值
table = []
for i in range(256):
    if i < count:
        table.append(0)
    else:
        table.append(1)
img = img.point(table, '1')
img.save('c.png')  # 保存处理后的验证码

#识别验证码
text = Image.open('c.png')
result = pytesseract.image_to_string(text)
resultj = re.sub(u"([^\u4e00-\u9fa5\u0030-\u0039\u0041-\u005a\u0061-\u007a])", "", result)  # 去除识别出来的特殊字符
result_four = resultj[0:4]  # 只获取前4个字符
print(resultj)

#处理验证码并点击登录
driver.find_element_by_xpath('//*[@id="RANDOMCODE"]').send_keys(resultj)
driver.find_element_by_xpath('//*[@id="ul1"]/li[5]/button').click()
  • 5
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
正方教务是一个重要的教育管理系统,学生和教师可以在该站上查询课程信息、成绩、考试安排等。为了方便用户使用,很多人利用编程语言来编写模拟登录程序,实现自动化登录功能。 在Python中,我们可以使用第三方库如requests和BeautifulSoup来实现模拟登录。具体步骤如下: 1. 导入所需的库:requests和BeautifulSoup。 2. 构造登录页面的URL,一般为正方教务的首页。 3. 使用requests库发送GET请求,获取登录页面的HTML内容。 4. 利用BeautifulSoup库进行页面解析,找到登录表单的所有输入元素的name和value。 5. 通过requests库构造POST请求的表单数据,其中包括用户名和密码等登录信息。 6. 使用requests库发送POST请求,将登录信息提交到正方教务服务器。 7. 根据服务器返回的响应状态码,判断登录是否成功。 8. 如果登录成功,可以进行后续操作,比如查询课程信息、成绩等。 9. 如果登录失败,可以进行错误处理,比如提示用户重新输入用户名和密码。 需要注意的是,由于正方教务每个学校的登录页面可能略有差异,我们需要根据具体情况来修改代码中的URL和表单元素的name。 总结来说,通过Python的requests和BeautifulSoup库,我们可以实现模拟登录正方教务的功能,实现自动化查询课程信息、成绩等操作,提高用户的使用便利性。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值