文章目录

  • 前言
  • 明确目标
  • 最终效果
  • 开发环境
  • 思路分析
  • 实现步骤
  • 运行效果
  • 以下是全部代码

前言

最近在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相关推荐

  1. (七)Selenium自动化测试实战—工具开发

    上一篇:(六)Selenium自动化测试实战-unittest框架_要开朗的spookypop的博客-CSDN博客 之前的自动化测试实践都是基于代码的管理,需要测试人员都有一样的代码水平,在公司推广起 ...

  2. (五)Selenium自动化测试实战—PO模式

    上一篇:(四)selenium自动化测试之上传本地文件_要开朗的spookypop的博客-CSDN博客_selenium上传本地文件 先看下测试代码运行效果: 在做自动化测试时,测试框架设计很重要,测 ...

  3. Python高级特性与网络爬虫(二):使用Selenium自动化测试工具爬取一号店商品信息

    上一篇介绍了Ajax动态渲染的页面的分析和爬取,通过JavaScript动态渲染的页面的方式不只有ajax这一种,还有很多其他的方式,分析他们的网页结构和加密参数难度非常大,为了解决这样的页面的数据爬 ...

  4. selenium自动化测试实战教学(12306自动化订票)春节出行必备

    一.Selenium介绍 Selenium 是什么?一句话,自动化测试工具.它支持各种浏览器,包括 Chrome,Safari,Firefox 等主流界面式浏览器,如果你在这些浏览器里面安装一个 Se ...

  5. element ui input视图没刷新_[Selenium自动化测试实战] 如何在UI自动化测试中加入REST API的操作...

    问题 当我们描述一个"好的自动化测试用例"时,经常出现标准是: 精确.自动化测试用例应该测试一件事,只有一件事.与测试用例无关的应用程序的某个部分中的错误不应导致测试用例失败. 独 ...

  6. selenium自动化测试和爬取名言和京东商品信息

    如愿 一.selenium 1.1简介 1.2 下载 二.自动化测试 三.爬取名言 四.爬取京东商品信息 五.总结 六.参考资料 一.selenium 1.1简介 Selenium是一个用于Web应用 ...

  7. Python Selenium爬虫实战应用

    本节讲解 Python Selenium 爬虫实战案例,通过对实战案例的讲解让您进一步认识 Selenium 框架. 实战案例目标:抓取京东商城(https://www.jd.com/)商品名称.商品 ...

  8. Python3 爬虫实战 — 模拟登陆哔哩哔哩【滑动验证码对抗】

    登陆时间:2019-10-21 实现难度:★★★☆☆☆ 请求链接:https://passport.bilibili.com/login 实现目标:模拟登陆哔哩哔哩,攻克滑动验证码 涉及知识:滑动验证 ...

  9. 【Python爬虫】【2020最新哔哩哔哩验证码识别实战】【滑块验证码】【附源码】

    哔哩哔哩实战----验证码识别 利用Selenium来模拟B站登录,并实现线极验验证码的识别. 初步分析 B站的登录界面如下: 登录需要完成:1.账户输入:2.密码输入:3.登录后需要通过滑块来进行验 ...

最新文章

  1. PowerShell 导入 SQL Server 的 PS 模块
  2. 性能比GPU高100倍!华人教授研发全球首个可编程忆阻器AI计算机
  3. 机器学习第3天:多元线性回归
  4. python判断值是否在excel中_python接口自动化测试之根据excel中的期望结果是否存在于请求返回的响应值中来判断用例是否执行成功...
  5. python转换函数使用_python进制转换函数代码的使用
  6. pacf和acf_如何通过Wordpress API,ACF和Express.js使Wordpress更加令人兴奋
  7. mysql的执行效率_数据库执行效率的对比测试
  8. c#求三角形面积周长公式_C#源代码—三角形面积、圆的面积
  9. Ubuntu18.04下WizNote为知笔记源码编译安装
  10. 天线巴伦制作和原理_一种宽带集成巴伦及天线单元的制作方法
  11. 数字电路基础知识(二)
  12. kgtemp文件转mp3工具
  13. idea和搜狗输入法快捷键冲突_Win10 输入法简繁体快捷键与 IDEA 冲突
  14. 2018年支付宝领取大红包破解教程
  15. Microsoft Visual Studio 2019正式版离线安装包下载
  16. 长江雨课堂考试半自动答题python脚本
  17. 安卓应用在各大应用市场上架方法
  18. 让Y40上的MAC启动更快
  19. 计算机上如何转换搜狗,怎样切换输入法,搜狗输入法五笔和拼音切换
  20. anaconda无法启动,一直停在loading applications卡住的解决方案

热门文章

  1. JAVA中DNS缓存设置
  2. 使用 PsPing PaPing 进行 TCP 端口连通性测试
  3. Kubernetes(k8s)入门到实战教程笔记总结
  4. Gauge中文文档(4)—Gauge使用
  5. 向标准输出上打印一些用ASCII字符组成的图形。
  6. OPTIONS请求跨域
  7. 2023 个人引导页开源单页html源码
  8. 四人追逐问题的解析解
  9. Virtual for mac搭建CentOS虚拟机联网
  10. HIT 软件构造 垃圾回收