【可视化爬虫实战】使用selenium爬取学校教务网并保存成绩截图

本文目录

写作缘起

南墙最近学习爬虫了解到了一个好玩的玩意儿—selenium自动化测试工具,Selenium是一个用于Web应用程序测试的工具,它直接运行在浏览器中,就像真正的用户在操作一样。这样就可以跳过js、加密等反扒手段。来了个新的东西必须实战一下,所以南墙就想着去实现一个登录学校教务网的小程序。

上代码

import time
from selenium import webdriver#驱动浏览器
from selenium.webdriver.support.wait import WebDriverWait #等待页面加载完毕 寻找某些元素
browser = webdriver.Chrome()
# 最大化窗口
browser.maximize_window()
wait = WebDriverWait(browser, 10)  # 设置selenium等待浏览器加载完毕的最大等待时间
url = 'http://kdjw.hnust.edu.cn/'
browser.get(url)
# 账号输入框
username = browser.find_element_by_xpath('//*[@id="userAccount"]')
username.send_keys('填写自己的账号')
# 密码输入框
password = browser.find_element_by_xpath('//*[@id="userPassword"]')
password.send_keys('填写自己的密码')
# 登录按钮
login_btn = browser.find_element_by_id('btn-login')
login_btn.click()
print('开始查询')
time.sleep(5)
# 学籍成绩
scores = browser.find_element_by_xpath('//*[@id="accordion"]/li[3]/div')
scores.click()
time.sleep(2)
# 我的成绩
myscores = browser.find_element_by_xpath('//*[@id="accordion"]/li[3]/ul/li[3]/div')
myscores.click()
time.sleep(2)
# 课程成绩查询
course_scores = browser.find_element_by_xpath('//*[@id="NEW_XSD_XJCJ_WDCJ_KCCJCX"]')
course_scores.click()
time.sleep(2)
# 收起左侧的箭头(<)
left_arrow = browser.find_element_by_xpath('/html/body/div/div[1]/div/div/label/i').click()
time.sleep(2)
# 屏幕截图
path = './测试.png'
browser.save_screenshot(path)
print('截图已保存至',path)
browser.quit()

思路分析

下载selenium库

使用pip install selenium命令下载selenium库,可以看到我这里已经下载好了
【可视化爬虫实战】使用selenium爬取学校教务网并保存成绩截图

使用selenium库

这里可能要介绍一下selenium的一些基本使用方法

访问网页

get方式

browser = webdriver.Chrome()
url = 'http://kdjw.hnust.edu.cn/'
browser.get(url)

获取标签(这里使用xpath)

也可以使用id、class、selector等等,不过xpath看起来复杂,其实就是一条路径,格式类似于windows文件绝对路径。而且操作容易,不想自己写的小伙伴可以选中标签右键 copy -> copy xpath
myscores = browser.find_element_by_xpath('//*[@id="accordion"]/li[3]/ul/li[3]/div')

模拟浏览器行为

获取标签之后我们就需要对标签进行单击、拖拽、双击等等浏览器模拟行为,本文用到了click(左键单击)、send_keys(设置内容)、save_screenshot(截图)这几个。

具体使用如下:

# 账号输入框
username = browser.find_element_by_xpath('//*[@id="userAccount"]')
username.send_keys('填写自己的账号')
# 密码输入框
password = browser.find_element_by_xpath('//*[@id="userPassword"]')
password.send_keys('填写自己的密码')
# 登录按钮
login_btn = browser.find_element_by_id('btn-login')
login_btn.click()

保存截图

等待查询页面结果显示出来之后就可以保存截图了
使用browser.save_screenshot(path)方法

效果展示

终端运行结果,可以看到截图保存路径
【可视化爬虫实战】使用selenium爬取学校教务网并保存成绩截图
打开图片
【可视化爬虫实战】使用selenium爬取学校教务网并保存成绩截图

写在最后

对selenium的总结

selenium可以让我们轻易越过一些比较难破解的反爬虫措施,比如js、加密等等,是一种很好的可视化工具,可以用来开发可视化爬虫。
当然没有完美无缺的东西,selenium也存在一些缺点,比如爬取速度慢,ajax动态加载、css动画渲染需要一定的时间,这个时间长达几秒,对于一些不要求高性能的爬虫这无关紧要。但是对于一个要爬去几万条数据的爬虫而言,这显然不合适。

项目总结

本项目爬取教务网学生成绩就是属于前者的一种情况,只需要爬取一个人的数据量当然小,可以作为一个工具来选课查成绩等等,简单快捷,最重要的是不用再去输入繁琐的账号密码操作。

上一篇:6 执行 excel 中的步骤


下一篇:webdriver mange用法-告别手动下载driver