锵锵✨
建议前往本人bolg【点这里】查看哦,观感更加,嘿嘿👻
Blog: xst73.github.io
为了解决每天忘记课程而需要不停进入教务系统查课表的烦恼(不是
刚刚学了一点点爬虫的x73决定写一个爬虫项目来爬取课表信息用来导入本地课表软件!
准备工作
用到的模块
模块 | 版本 |
---|---|
selenium | >= 4.0 |
webdriver-manager | 3.8.4 |
bs4 | 4.11.1 |
re | all |
用到的工具
PyCharm、 Edge
tips:Edge 为 selenium所需的浏览器,需保证最新版本,可以是其他浏览器,但要保证代码中调整为相应的驱动
{:.warning}
开始!!
provider – 获取课表页面源代码
step1. 获取登录状态cookie
课表界面都没看到,怎么获取嘛
我们想要见到我们亲爱的课表同学,就先要保证我们处于登录状态,这样我们才能顺利的见到课表~
所以我们要先通过selenium
模拟登录行为,获取到登录状态下的cookie。
def get_cookie(url):
option = webdriver.EdgeOptions()
option.add_argument('headless')
option.add_argument('disable-gpu')
service = EdgeService(executable_path=EdgeChromiumDriverManager().install())
driver = webdriver.Edge(service=service, options=option)
driver.get(url)
driver.find_element(By.ID, 'username').send_keys('******') # your username/id
driver.find_element(By.ID, 'passWord').send_keys('******') # your password
driver.find_element(By.ID, 'loginButton').click()
return driver.get_cookies()
小插曲
这里浅浅的讲一下
selenium
{:.info} 的使用方法~step0. 设置隐藏浏览器,即使用无头模式进行,可以酌情删掉哦(不是
option = webdriver.EdgeOptions() option.add_argument('headless') option.add_argument('disable-gpu')
step1. 使用
install()
获取管理器使用的位置, 并将其传递到服务类中service = EdgeService(executable_path=EdgeChromiumDriverManager().install())
step2. 使用
Service
实例并初始化驱动程序driver = webdriver.Edge(service=service, options=option)
tips: 详情参考 Install browser drivers - Selenium
step2. 启动 Edge-Driver
接下来就可以启动 新的
edgeDriver, 步骤和之前一样哦~
def html_provider():
print('[INFO] Get URL and Cookie')
url = "http://jwglxt.hncj.edu.cn:8061/admin/indexMain/M140202" # 课表页面url
url_login = "http://jwglxt.hncj.edu.cn:8061/admin/login" # 登录界面url
cookies = get_cookie(url_login)
print('[INFO] Start Edge Driver')
option = webdriver.EdgeOptions()
option.add_argument('headless')
option.add_argument('disable-gpu')
service = EdgeService(executable_path=EdgeChromiumDriverManager().install())
driver = webdriver.Edge(service=service, options=option)
step3. 添加Cookie
添加前需要先使用driver.get(url)
访问一次目的url, 让selenium识别到需要添加cookie的作用域,不然会报错哦!
print('[INFO] Getting HTML from URL')
driver.get(url)
driver.delete_all_cookies() # 这个也是必要的,不然cookie会添加失败,但不会报错!
for i in cookies