selenium自动化测试实战案例哔哩哔哩信息至Excel
文章目录
- 前言
- 明确目标
- 最终效果
- 开发环境
- 思路分析
- 实现步骤
- 运行效果
- 以下是全部代码
前言
最近在B站学习知识,于是看完了视频就想着练习一下巩固一下知识,就地取材的做了个B站selenium小项目,感觉还挺适合新手入门的,于是迫不及待想分享给大家。希望大家都能学到新知识,本章说的还是selenium自动化测试实现。
明确目标
首先开始工作之前知道我们需要哪些信息,这里我框起来的是我需要的信息,(标题,封面,up博主,时间,观看次数)。
最终效果
先看下程序实现的最终效果,需要的数据进行了保存。
看完了接下来开始操作吧
开发环境
配置好selenium运行的环境,及相关库,(可在博客上查找)
工具:pycharm
版本:Python 3.8
思路分析
操作pyCharm打开浏览器对象,观察页面源码,用selenium定位元素的方法找到输入框和搜索框,
(注意要看一下页面源码这两个框的位置在子页面中还是在当前页面,如果在子页面中就要切换进子页面中才能定位到元素,在当前页面就可以直接上selenium定位元素)。找到输入框就可以操作selenium输入信息,并点击搜索,信息搜索出来后selenium定位元素找到全部的视频div,遍历每个div,用selenium定位我们需要的信息并提取出来。
实现步骤
导入相关库
操作pyCharm打开浏览器对象,设置窗口最大化,打开浏览器后等待输入框元素加载出来后输入关键字python并点击搜索,然后切换窗口句柄对搜索页面操作,selenium定位元素回到旧版页面并点击,这样哔哩页面就切换回旧版的页面,最后返回driver让其他函数进行操作。
搜索信息出来后,selenium定位页面底部的一个元素(这里我定位的元素是下一页)设置动作链移动到页面底部,防止有些页面需要异步加载数据出来。
def get_data(driver):all_data = [] # 空列表num = 1while num <= 50:print(f'=====================================正在保存第{num}页的数据内容=================================')# 动作链try:action = driver.find_element(By.XPATH, '//*[@class="page-item next"]/button')ActionChains(driver).move_to_element(action).perform()except:print('==============================没有下一页了========================')
selenium找到全部的li,遍历每一个li再用selenium提供的定位元素方法找我需要的信息提取即可,提取完就构建字典储存数据,并在空列表的末尾增添我们字典,再调用其他函数传参对封面进行保存。
# 全部视频time.sleep(1)all_li = driver.find_elements(By.XPATH,'//*[@id="all-list"]/div[1]/div[2]/ul[2]/li')# 判断空列表if all_li == []:all_li = driver.find_elements(By.XPATH, '//*[@id="all-list"]/div[1]/ul/li')elif all_li != []:all_li = driver.find_elements(By.XPATH,'//*[@id="all-list"]/div[1]/div[2]/ul[2]/li')time.sleep(1)for i in all_li:ditail = i.find_element(By.XPATH,'./div/div[1]/a').get_attribute('href')title = i.find_element(By.XPATH,'./div/div[1]/a').get_attribute('title')new_time = i.find_element(By.XPATH,'./div/div[3]/span[3]').textuser = i.find_element(By.XPATH,'./div/div[3]/span[4]').textimages = i.find_element(By.XPATH,'./a/div/div[1]/img').get_attribute('src')if images == '':images = 'https://i0.hdslb.com/bfs/archive/9974b552950679b49c0e73d10bd55c29fcec35b9.png@400w_250h_1c.webp'watch = i.find_element(By.XPATH,'./div/div[3]/span[1]').textitem = {'标题': title,'详情页': ditail,'发布时间': new_time,'up博主': user,'图片': images,'观看次数': watch}print(item)all_data.append(item)save_Images(title,images)
翻页实现,在页面底部我们观察发现所需的数据有50页,那么我们就可以定位到这个下一页的标签,让它每保存完一页就点击下一页,从而实现翻页的效果。
定位到下一页,如果每一页能找得到这个下一页的标签就点击,否则跳出循环。
下图函数是实现对封面进行储存。
数据保存至Exel中
运行效果
到这里程序就完成了,运行代码时注意保持网络畅通,如果网速太慢可能会失败,建议在网络好的环境下运行。
以下是全部代码
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver import ActionChains # 动作链
from selenium.webdriver import ChromeOptions # 浏览器配置
from selenium.webdriver.support import expected_conditions as EC
import time
import pandas as pd
import os.path
import requestspage = 1def get_serch(url):# 创建浏览器对象driver = webdriver.Chrome()# 时间等待wait = WebDriverWait(driver,10)# 发送请求driver.get(url=url)# 窗口最大化driver.maximize_window()time.sleep(1)# 直到出现这个元素wait.until(EC.presence_of_element_located((By.TAG_NAME,'input')))# input输入entry = driver.find_element(By.TAG_NAME,'input')entry.send_keys('python')time.sleep(1)# clickbutton = driver.find_element(By.XPATH,'//div[@class="nav-search-btn"]')button.click()# 切换窗口视角driver.switch_to.window(driver.window_handles[-1])time.sleep(2)# 回到旧版dic = driver.find_element(By.XPATH,'//*[@id="i_cecream"]/div[1]/div[2]/div/div/div/div/button[1]')dic.click()time.sleep(1)return driverdef get_data(driver):all_data = [] # 空列表num = 1while num <= 50:print(f'=====================================正在保存第{num}页的数据内容=================================')# 动作链try:action = driver.find_element(By.XPATH, '//*[@class="page-item next"]/button')ActionChains(driver).move_to_element(action).perform()except:print('==============================没有下一页了========================')# 全部视频time.sleep(1)all_li = driver.find_elements(By.XPATH,'//*[@id="all-list"]/div[1]/div[2]/ul[2]/li')# 判断空列表if all_li == []:all_li = driver.find_elements(By.XPATH, '//*[@id="all-list"]/div[1]/ul/li')elif all_li != []:all_li = driver.find_elements(By.XPATH,'//*[@id="all-list"]/div[1]/div[2]/ul[2]/li')time.sleep(1)for i in all_li:ditail = i.find_element(By.XPATH,'./div/div[1]/a').get_attribute('href')title = i.find_element(By.XPATH,'./div/div[1]/a').get_attribute('title')new_time = i.find_element(By.XPATH,'./div/div[3]/span[3]').textuser = i.find_element(By.XPATH,'./div/div[3]/span[4]').textimages = i.find_element(By.XPATH,'./a/div/div[1]/img').get_attribute('src')if images == '':images = 'https://i0.hdslb.com/bfs/archive/9974b552950679b49c0e73d10bd55c29fcec35b9.png@400w_250h_1c.webp'watch = i.find_element(By.XPATH,'./div/div[3]/span[1]').textitem = {'标题': title,'详情页': ditail,'发布时间': new_time,'up博主': user,'图片': images,'观看次数': watch}print(item)all_data.append(item)save_Images(title,images)time.sleep(1)try:# 翻页net_page = driver.find_element(By.XPATH,'//*[@class="page-item next"]/button')net_page.click()time.sleep(3)num += 1except:breakreturn all_datadef save_csv(all_data):df = pd.DataFrame(all_data)df.to_csv('哔哩.csv',index=False)def save_Images(title,images):global pageif not os.path.exists('./哔哩/'):os.mkdir('./哔哩/')response = requests.get(url=images).contentwith open('./哔哩/' + str(page) + '.jpg',mode='wb')as f:f.write(response)print('正在保存图片:' + title)page += 1def mian():url = 'https://www.bilibili.com/'driver = get_serch(url)all_data = get_data(driver)save_csv(all_data)if __name__ == '__main__':mian()
selenium自动化测试实战案例哔哩哔哩信息至Excel相关推荐
- (七)Selenium自动化测试实战—工具开发
上一篇:(六)Selenium自动化测试实战-unittest框架_要开朗的spookypop的博客-CSDN博客 之前的自动化测试实践都是基于代码的管理,需要测试人员都有一样的代码水平,在公司推广起 ...
- (五)Selenium自动化测试实战—PO模式
上一篇:(四)selenium自动化测试之上传本地文件_要开朗的spookypop的博客-CSDN博客_selenium上传本地文件 先看下测试代码运行效果: 在做自动化测试时,测试框架设计很重要,测 ...
- Python高级特性与网络爬虫(二):使用Selenium自动化测试工具爬取一号店商品信息
上一篇介绍了Ajax动态渲染的页面的分析和爬取,通过JavaScript动态渲染的页面的方式不只有ajax这一种,还有很多其他的方式,分析他们的网页结构和加密参数难度非常大,为了解决这样的页面的数据爬 ...
- selenium自动化测试实战教学(12306自动化订票)春节出行必备
一.Selenium介绍 Selenium 是什么?一句话,自动化测试工具.它支持各种浏览器,包括 Chrome,Safari,Firefox 等主流界面式浏览器,如果你在这些浏览器里面安装一个 Se ...
- element ui input视图没刷新_[Selenium自动化测试实战] 如何在UI自动化测试中加入REST API的操作...
问题 当我们描述一个"好的自动化测试用例"时,经常出现标准是: 精确.自动化测试用例应该测试一件事,只有一件事.与测试用例无关的应用程序的某个部分中的错误不应导致测试用例失败. 独 ...
- selenium自动化测试和爬取名言和京东商品信息
如愿 一.selenium 1.1简介 1.2 下载 二.自动化测试 三.爬取名言 四.爬取京东商品信息 五.总结 六.参考资料 一.selenium 1.1简介 Selenium是一个用于Web应用 ...
- Python Selenium爬虫实战应用
本节讲解 Python Selenium 爬虫实战案例,通过对实战案例的讲解让您进一步认识 Selenium 框架. 实战案例目标:抓取京东商城(https://www.jd.com/)商品名称.商品 ...
- Python3 爬虫实战 — 模拟登陆哔哩哔哩【滑动验证码对抗】
登陆时间:2019-10-21 实现难度:★★★☆☆☆ 请求链接:https://passport.bilibili.com/login 实现目标:模拟登陆哔哩哔哩,攻克滑动验证码 涉及知识:滑动验证 ...
- 【Python爬虫】【2020最新哔哩哔哩验证码识别实战】【滑块验证码】【附源码】
哔哩哔哩实战----验证码识别 利用Selenium来模拟B站登录,并实现线极验验证码的识别. 初步分析 B站的登录界面如下: 登录需要完成:1.账户输入:2.密码输入:3.登录后需要通过滑块来进行验 ...
最新文章
- golang中的strings.Trim
- CV之FR:DIY脚本通过人脸图像得到人脸特征向量并输出多张人脸图片之两两图片之间的距离
- 临床外显子组测序分析中的那些坑(中)
- 这是我的第一篇博文,请大家多多关照!~
- Zabbix监控网络设备讲解
- python_numpy_中的matrix与array的区别
- 贝尔英才学院计算机,特稿 | 从高三的二模倒数第一到考取南京邮电大学贝尔英才学院,他仅用了半年!...
- 约瑟夫环c语言程序完整版,约瑟夫环C语言实现源代码(1)
- MCU方案分享----按摩贴方案
- u盘复制一直正在计算机,解决U盘复制文件时电脑总是重启的方法
- 华硕主机退出BIOS界面
- iOS二维码生成与识别
- strchr()函数的详解与实现
- 腾讯、移动持续大手笔回购,港股龙头“带动”市场反弹?
- 北京市长昨天晚上给我们送温暖啦:)
- 【JavaWeb04】
- Python零基础速成班-第13讲-Python正则表达式Regex
- 下一代 IDE 工具 JetBrains Fleet 正式公测
- Java之有序集合hashMap
- 微机原理伪指令大全及在C语言中的结合应用举例