【邵奈一】Python爬虫专栏(三)之自动登录

邵奈一来了 2021-07-20 04:31:30
Python


  •  

 

0x00 教程内容
  1. 爬虫的流程是怎样的
  2. 如何通过代码实现自动登录
  3. 如何实现自动翻页

教程背景:上篇教程已经安装完了Selenium,并能够打开“邵奈一的博客主页”,这篇教程,我们一起来实现登录特定网页(职前通)官网,实现登录功能,并且在登录完成后继续点击特定的类别(大数据),实现翻页功能。

0x01 基础储备
1. 自动登录流程

a. 原理
网页是由HTML组成的,为了网页的好看,所以用到了CSS,为了让网页具有更加炫酷的动态效果,所有又加入了JS,但是我们都知道,网页的最基础骨架,是HTML。

而HTML又是由许许多多的标签所组成的,除了标签,还有标签里面的内容。

当我们要去实现一个自动登录功能的时候,我们需要清楚一些事情,登录按钮往往是通过一个Button标签实现的。我们点击登录按钮,其实就是点击了Button标签,点击之后,我们会进行提交用户名和密码操作。

简而言之,自动登录流程为:

打开谷歌浏览器=>打开网站=>点击登录按钮(显示登录页面)=>输入用户名和密码=>点击登录按钮(提交操作)。

b. 其实最关键点有两个
1、你要点击什么东西?2、点击之后你需要提交什么东西?

答案:
1、点击登录按钮,2、提交用户名和密码

原理已经清楚了,那么我们现在需要做的第一步就是,如何让代码能够找到你所想要点击的地方(标签/内容)?请继续往下面看!

2. 获取元素信息

a. 打开调试窗口
当你打开某一个网页的时候,其实你可以按键盘的F12键来调出浏览器的调试窗口,或者你右击网页,选择“检查”也可以,不信你试试现在你现在浏览的这边教程的网页:
在这里插入图片描述
b. 选择元素
步骤为先点击1、,然后选择2、,就会弹出3、内容了,此内容就是你所点击的标签相关内容,同理,你可以去点击一下登录按钮的标签。
在这里插入图片描述
c. 获取元素的位置信息
现在我们已经知道怎么获取元素的标签信息了,但是,这个信息仅仅只是元素信息而已,我们都知道,同一种标签,其实是可以在很多地方使用的,竟然是这样,按道理来说,其实代码如果是单单通过获取标签名来获取你的位置信息,其实是会混淆的,原理跟以前学习HTML时一样,此处不多说,能理解即可,不理解也没关系。那怎样才能让代码能够找到你这个位置呢?此处我们可以右击你的标签内容,选择Copy,选择Copy XPath:
在这里插入图片描述
XPath的内容类似于这样://*[@id="content_views"]/p[15]/a[2],XPath 是一门在 XML 文档中查找信息的语言,不理解也没关系。如果你需要用到此位置,你需要记录好此XPath,之后在代码中会用到。
在这里插入图片描述

3. 提交内容

a. 刚刚已经获取到我们所需要点击的位置,还需要实现点击操作和填充内容操作,最后才实现点击登录按钮实现提交,这里边的内容需要通过代码来实现:

login = browser.find_element_by_xpath('//*[@id="loginshow1"]/span')

此处可以由XPath获得一个对象,然后此login对象可以点击,如:

login.click()

如果是填充的元素XXX,如用户名输入框,还可以清除内容:
XXX.clear()
也可以填充内容:
XXX.send_keys("shao")
此处先理解!

0x02 自动登录实现
1. 流程

a. 打开谷歌浏览器 => 访问职前通官网 => 获取需要点击的元素 => 点击 => 提交内容 => 提交
在这里插入图片描述
在这里插入图片描述

2. 完整代码
#!/usr/bin/env python
# -*- coding:utf-8 -*-
from selenium import webdriver
browser = webdriver.Chrome("C:\\Users\\shaonaiyi\\AppData\\Local\\Google\\Chrome\\Application\\chromedriver.exe")
browser.get("http://www.zhiqiantong.cn/")
login = browser.find_element_by_xpath('//*[@id="loginshow1"]/span')
login.click()
username = browser.find_element_by_xpath('//*[@id="userEmail"]')
username.clear()
password = browser.find_element_by_xpath('//*[@id="userPassword"]')
password.clear()
username.send_keys("自己的账号")
password.send_keys("自己的密码")
login_button = browser.find_element_by_xpath('//*[@id="dcWrap"]/div/div[3]/ul/li[5]/input')
login_button.click()

代码比较简单,不再重复讲解。

3. 执行结果

发现已经登录上了职前通官网:在这里插入图片描述

0x03 彩蛋

前面已经实现了自动登录功能,此彩蛋为实现自动翻页。因为在爬虫的时候,肯定是会有很多页的内容的。

流程:自动点击进入制定的类别(大数据),找到翻页按钮,点击翻页按钮,当无法点击时,停止翻页。

完整代码:

#!/usr/bin/env python
# -*- coding:utf-8 -*-
from selenium import webdriver
browser = webdriver.Chrome("C:\\Users\\shaonaiyi\\AppData\\Local\\Google\\Chrome\\Application\\chromedriver.exe")
browser.get("http://www.zhiqiantong.cn/")
login = browser.find_element_by_xpath('//*[@id="loginshow1"]/span')
login.click()
username = browser.find_element_by_xpath('//*[@id="userEmail"]')
username.clear()
password = browser.find_element_by_xpath('//*[@id="userPassword"]')
password.clear()
username.send_keys("自己的账号")
password.send_keys("自己的密码")
login_button = browser.find_element_by_xpath('//*[@id="dcWrap"]/div/div[3]/ul/li[5]/input')
login_button.click()
courses = browser.find_element_by_xpath('//*[@id="header"]/section/nav/ul/li[3]/a')
courses.click()
bigdata_cate = browser.find_element_by_xpath('//*[@id="course-main"]/section/section/div[1]/dl/dd[1]/ul/li[9]/a')
bigdata_cate.click()
next_page = browser.find_element_by_xpath('//*[@id="course-main"]/div/div[1]/ul/li[4]/a')
flag = next_page.click()
if flag is None:
print("——————————————————已是最后一页,无法再点击——————————————————")

其实翻页功能非常容易实现,也就是点击而已。

0xFF 总结
  1. 本教程不难,但是已经可以做更多有趣的事情了,还可以自动翻页。
  2. 继续关注我,学习编程技术。

作者简介:邵奈一
全栈工程师、市场洞察者、专栏编辑
| 公众号 | 微信 | 微博 | CSDN | 简书 |

福利:
邵奈一的技术博客导航
邵奈一 原创不易,如转载请标明出处。


在这里插入图片描述

 

版权声明
本文为[邵奈一来了]所创,转载请带上原文链接,感谢
https://blog.51cto.com/u_12564104/2895120

  1. 【推荐】常见的Python数据可视化库
  2. 基于Python3.3+Selenium3.0框架实战Web自动化测试实战(百度网站实测项目)
  3. 【django轻量级框架】用Mysql的各种项目响应速度慢?一招解决!
  4. 【django轻量级框架】Django项目导入css,js,images等静态文件
  5. 【django轻量级框架】HTML上传文件拦截到本地
  6. 【深度学习入门到精通系列】留一交叉验证法Python实现(看不懂你来打我~!)
  7. Python机器学习笔记:sklearn库的学习
  8. python【Opencv计算机视觉库】opencv模块cv2常用函数用法(全)
  9. python基础练习(七)
  10. python基础练习(八)
  11. python基础练习(九)
  12. python基础练习(十)
  13. python新增练习(一)
  14. python新增练习(二)
  15. python新增练习(三)
  16. Python中的排序sorted(d.items(), key=lambda x: x[1])
  17. python 判断字母大小写
  18. python绘制科赫雪花(递归)
  19. 解决cmd命令查看python版本“python不是内部命令或外部命令,也不是可执行程序解决方案”的问题
  20. Python Numpy介绍
  21. python —pandas库常用函数
  22. Python应用matplotlib绘图简介
  23. Python matplotlib高级绘图详解
  24. 入门训练 Fibonacci数列-python实现
  25. Python -二维数组定义
  26. python二进制相加
  27. Python文本处理:解析json格式的数据
  28. 查看python安装路径
  29. Python编程之计算生态
  30. Python-turtle标准库知识小结(python绘图工具)
  31. Python-time标准库知识小结
  32. Python-random标准库知识小结
  33. python安装第三方库的三种方法
  34. python程序的控制结构
  35. Python程序的函数和代码复用
  36. python之组合数据类型
  37. python【力扣LeetCode算法题库】300 最长上升子序列(动态规划)
  38. python【力扣LeetCode算法题库】695- 岛屿的最大面积(深搜)
  39. python【力扣LeetCode算法题库】面试题 01.06-字符串压缩
  40. python【力扣LeetCode算法题库】1160-拼写单词
  41. python【力扣LeetCode算法题库】836- 矩形重叠
  42. python【力扣LeetCode算法题库】409-最长回文串(数学 计数器)
  43. python【力扣LeetCode算法题库】面试题40- 最小的k个数
  44. python【力扣LeetCode算法题库】945- 使数组唯一的最小增量
  45. python【力扣LeetCode算法题库】365- 水壶问题(裴蜀等式)
  46. python【力扣LeetCode算法题库】876- 链表的中间结点
  47. python【力扣LeetCode算法题库】面试题 17.16- 按摩师(DP)
  48. python【力扣LeetCode算法题库】892-三维形体的表面积
  49. python【力扣LeetCode算法题库】999-车的可用捕获量(DFS)
  50. python【力扣LeetCode算法题库】914. 卡牌分组(reduce & collections.Counter)
  51. python【力扣LeetCode算法题库】820- 单词的压缩编码
  52. python【力扣LeetCode算法题库】1162- 地图分析(BFS)
  53. python【力扣LeetCode算法题库】面试题62- 圆圈中最后剩下的数字(约瑟夫环)
  54. python【力扣LeetCode算法题库】912- 排序数组
  55. python【力扣LeetCode算法题库】1111- 有效括号的嵌套深度
  56. python【力扣LeetCode算法题库】289- 生命游戏
  57. python【力扣LeetCode算法题库】12- 整数转罗马数字(打表 模拟)
  58. python【数据结构与算法】内置函数enumerate(枚举) 函数(看不懂你来打我)
  59. python【力扣LeetCode算法题库】13- 罗马数字转整数
  60. python【数据结构与算法】内置函数 zip() 函数(看不懂你来打我)