本文目录
写作缘起
南墙最近学习爬虫了解到了一个好玩的玩意儿—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的一些基本使用方法
访问网页
get方式
browser = webdriver.Chrome()
url = 'http://kdjw.hnust.edu.cn/'
browser.get(url)
获取标签(这里使用xpath)
也可以使用id、class、selector等等,不过xpath看起来复杂,其实就是一条路径,格式类似于windows文件绝对路径。而且操作容易,不想自己写的小伙伴可以选中标签右键 copy -> copy xpathmyscores = 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可以让我们轻易越过一些比较难破解的反爬虫措施,比如js、加密等等,是一种很好的可视化工具,可以用来开发可视化爬虫。
当然没有完美无缺的东西,selenium也存在一些缺点,比如爬取速度慢,ajax动态加载、css动画渲染需要一定的时间,这个时间长达几秒,对于一些不要求高性能的爬虫这无关紧要。但是对于一个要爬去几万条数据的爬虫而言,这显然不合适。
项目总结
本项目爬取教务网学生成绩就是属于前者的一种情况,只需要爬取一个人的数据量当然小,可以作为一个工具来选课查成绩等等,简单快捷,最重要的是不用再去输入繁琐的账号密码操作。