IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 开发测试 -> Selenium爬取打卡记录并记录到表格 -> 正文阅读

[开发测试]Selenium爬取打卡记录并记录到表格

一篇学会爬取打卡记录,就不用一一就复制粘贴了

背景:老师要求要记录每天的打卡情况,然而人数有点多,不想一一点开记录.那怎么办呢,诶我们可以利用爬虫Selenium来爬取数据


一般是用request来爬取,但是这里利用cookie信息登入的时候有些问题,所以就利用Selenium了,这里就可以避免一些问题

这里以CTFd平台为例子

一、必备工具

首先下载 chromedriver,注意要和自己的谷歌浏览器版本要对应,谷歌什么版本,你就下载什么版本就可
工具地址
然后就安装selenium库

pip install selenium 
直接安装即可

安装完必备工具后,就可以使用了
然后在python环境中导入即可

from selenium import webdriver
diver=webdriver.Chrome(executable_path="D:\Chromdriver\chromedriver_win32\chromedriver3.exe")

二、获取cookie信息

要想实现直接登入,那末cookie信息事必不能少的.

我们先模拟登入F12 查看网页代码
请添加图片描述
定位到用户名密码,然后实现自动登入,send_keys()实现填入用户名密码

diver.find_element_by_id('name').send_keys('haisen')
diver.find_element_by_id('password').send_keys('12345678')

定位到提交按钮实现自动提交,用click()模拟点击

diver.find_element_by_id('_submit').click()

然后打印cookie就行啦,总的代码如下

diver=webdriver.Chrome(executable_path="D:\Chromdriver\chromedriver_win32\chromedriver3.exe")
diver.get('http://URL:8000/login?next=%2Fchallenges%3F')
time.sleep(2)
diver.find_element_by_id('name').send_keys('haisen')
diver.find_element_by_id('password').send_keys('12345678')
time.sleep(2)
diver.find_element_by_id('_submit').click()
time.sleep(2)
print(diver.get_cookies())

我们可以看到cookie信息已经打印出来
请添加图片描述
然后我们在添加cookie进去,就是先自动登入了

for item in cookie:
    diver.add_cookie(item)

三、获取要找的信息

实现登入以后,然后我们就找需要记录的信息了,这里我以名字为例
找到某个请添加图片描述
题目后点开,点开Sloves 就能发现要找的name了请添加图片描述
点开后url为

http://42.URL:8000/challenges#福尔摩斯-3
然后我们再点开Solves 就能看见name名

f12后找到sloves对应的类名
在这里插入图片描述
我们可以用diver.find_element_by_class_name(’’)来找到对应的元素,并实现点击

diver.find_element_by_class_name('challenge-solves').click()

点开后我们就可以用xpath语法来将name 获取
在这里插入图片描述
这样就可以获取了
然后用diver打印出来即可
总的代码为

from selenium import webdriver

from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
import re
import time
diver=webdriver.Chrome(executable_path="D:\Chromdriver\chromedriver_win32\chromedriver3.exe")
diver.get('http://URL:8000/login?next=%2Fchallenges%3F')
time.sleep(2)
cookie=[{'domain': 'URL', 'expiry': 1642423459, 'httpOnly': True, 'name': 'session', 'path': '/', 'sameSite': 'Lax', 'secure': False, 'value': '7af6d510-a94e-4dbb-b7b2-50dee11811a6._CJfH_7ffk6NIa_aCXJmN63ZS-E'}]
for item in cookie:
    diver.add_cookie(item)

url='http://URL:8000/challenges#Base家族-19'
diver.get(url)
time.sleep(3)
diver.find_element_by_class_name('challenge-solves').click()
time.sleep(2)
daka_name=diver.find_element_by_xpath("//tbody[@id='challenge-solves-names']").text

print(daka_name)

简单的几行代码就可以实现捕获信息了.结果如图
在这里插入图片描述
然后利用正则提取汉字

hanzi= re.compile(r'[\u4E00-\u9FA5]+')
mingdan=re.findall(hanzi,daka_name)
count=0
for i in mingdan:
    print('第{0}名  {1} 打卡次数{2}'.format(str(count),i,1))
    count+=1

这里只是以一个challenge来说,我们可以利用列表来存取所有challenge然后for循环就实现了所有挑战的打卡信息,这里就不写了,感兴趣的可以自己实现一下

四、存储所读取的数据

import xlwt
book = xlwt.Workbook()
sheet = book.add_sheet('打卡')
for i in range(len(mingdan)):
    sheet.write(i,1,mingdan[i])
    sheet.write(i,2,'你统计的次数')

book.save('task.xls')

在这里插入图片描述
总的代码如下

from selenium import webdriver

from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
import re
import time
diver=webdriver.Chrome(executable_path="D:\Chromdriver\chromedriver_win32\chromedriver3.exe")
diver.get('http://url:8000/login?next=%2Fchallenges%3F')
time.sleep(2)
# diver.find_element_by_id('name').send_keys('haisen')
# diver.find_element_by_id('password').send_keys('12345678')
# time.sleep(2)
# diver.find_element_by_id('_submit').click()
# time.sleep(2)
# print(diver.get_cookies())
cookie=[{'domain': 'url', 'expiry': 1642423459, 'httpOnly': True, 'name': 'session', 'path': '/', 'sameSite': 'Lax', 'secure': False, 'value': '7af6d510-a94e-4dbb-b7b2-50dee11811a6._CJfH_7ffk6NIa_aCXJmN63ZS-E'}]
for item in cookie:
    diver.add_cookie(item)

url='http://url:8000/challenges#Base家族-19'
diver.get(url)
time.sleep(3)
diver.find_element_by_class_name('challenge-solves').click()
time.sleep(2)
daka_name=diver.find_element_by_xpath("//tbody[@id='challenge-solves-names']").text

print(daka_name)

hanzi= re.compile(r'[\u4E00-\u9FA5]+')
mingdan=re.findall(hanzi,daka_name)
count=0
for i in mingdan:
    print('第{0}名  {1} 打卡次数{2}'.format(str(count),i,1))
    count+=1
print(mingdan)
import xlwt
book = xlwt.Workbook()
sheet = book.add_sheet('打卡')
for i in range(len(mingdan)):
    sheet.write(i,1,mingdan[i])
    sheet.write(i,2,'你统计的次数')

book.save('task.xls')

总结

可以使用Selenium,xlwt等模块将打卡name 进行表格统计.
后续还会更新更好的数据爬取.求个关注鸭

  开发测试 最新文章
pytest系列——allure之生成测试报告(Wind
某大厂软件测试岗一面笔试题+二面问答题面试
iperf 学习笔记
关于Python中使用selenium八大定位方法
【软件测试】为什么提升不了?8年测试总结再
软件测试复习
PHP笔记-Smarty模板引擎的使用
C++Test使用入门
【Java】单元测试
Net core 3.x 获取客户端地址
上一篇文章      下一篇文章      查看所有文章
加:2022-01-14 02:17:03  更:2022-01-14 02:19:09 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/18 4:41:44-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码