1.预登陆
首先手工登陆一次,通过抓包工具或者浏览器控制台分析登陆过程
2.模拟登陆
通常来说简单的爬虫用requests就能搞定
但是这个登陆过程,几次跳转,技术不够,没搞定
尝试使用selenium模拟登陆
selenium:本来用于自动化测试,由于其几乎完全模拟浏览器操作,所以也常用于爬虫
导入seleniu,使用selenium打开浏览器
这里我选择的是Chrome浏览器
注意:使用前需要下载相应的浏览器驱动
查看chrome版本:地址栏输入,chrome://version
版本对照表:
chromedriver版本 | 支持的Chrome版本 |
---|---|
v2.41 | v67-69 |
v2.40 | v66-68 |
v2.39 | v66-68 |
v2.38 | v65-67 |
v2.37 | v64-66 |
v2.36 | v63-65 |
v2.35 | v62-64 |
v2.34 | v61-63 |
v2.33 | v60-62 |
v2.32 | v59-61 |
v2.31 | v58-60 |
v2.30 | v58-60 |
v2.29 | v56-58 |
v2.28 | v55-57 |
v2.27 | v54-56 |
v2.26 | v53-55 |
v2.25 | v53-55 |
v2.24 | v52-54 |
v2.23 | v51-53 |
v2.22 | v49-52 |
v2.21 | v46-50 |
v2.20 | v43-48 |
v2.19 | v43-47 |
v2.18 | v43-46 |
v2.17 | v42-43 |
v2.13 | v42-45 |
v2.15 | v40-43 |
v2.14 | v39-42 |
v2.13 | v38-41 |
v2.12 | v36-40 |
v2.11 | v36-40 |
v2.10 | v33-36 |
v2.9 | v31-34 |
v2.8 | v30-33 |
v2.7 | v30-33 |
v2.6 | v29-32 |
v2.5 | v29-32 |
v2.4 | v29-32 |
下载地址:https://npm.taobao.org/mirrors/chromedriver/
from selenium import webdriver option = webdriver.ChromeOptions() option.add_argument('headless') # driver = webdriver.Chrome('/usr/local/bin/chromedriver') # 有头打开,这里是下载的driver地址 driver = webdriver.Chrome('/usr/local/bin/chromedriver',chrome_options=option) #无头打开,这里是下载的driver地址
有头无头
有头的是普通浏览器
无头的是没有界面的浏览器,速度更快
传入要登陆的URL地址
url = 'http://xxxxxxxxxx' driver.get(url)
浏览器审查元素,查看表单的'id'或者'classname'等用于定位
填写用户名,密码,并点击登陆
driver.find_element_by_id('username').send_keys('xxxxxxxxxx') driver.find_element_by_id('password').send_keys('xxxxxxxx') driver.find_element_by_class_name('dl_mian_middle_btn').click()
如果你是用的有头打开,那么你会看到系统启动了浏览器,并打开了网页,输入了账号密码,点下了登陆按钮
3.数据获取
学校比较懒,系统里除了一卡通的消费记录,啥都没有~~
所以接下来我们抓取一卡通消费记录
定位目标,点击查看
复制他的URL
打开这个URL
找到数据位置并输出
driver.get('http://xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx') page = driver.find_element_by_tag_name('body') print(page.text)
退出浏览器
driver.quit()
预计输出
完整代码
# -*- coding:utf-8 -*- from selenium import webdriver option = webdriver.ChromeOptions() option.add_argument('headless') driver = webdriver.Chrome('/usr/local/bin/chromedriver') # 有头打开 # driver = webdriver.Chrome('/usr/local/bin/chromedriver',chrome_options=option) #无头打开 url = 'http://xxxxxxxxxxxx' def dl(): driver.get(url) driver.find_element_by_id('username').send_keys('xxxxxxxx') driver.find_element_by_id('password').send_keys('xxxxxxxx') driver.find_element_by_class_name('dl_mian_middle_btn').click() driver.get('http://xxxxxxxxxxxxxxxxxx') page = driver.find_element_by_tag_name('body') print(page.text) if __name__ == '__main__': try: dl() finally: driver.quit()