自动化测试小技巧之Airtest-Selenium和Excel的无缝协作

news2024/11/25 12:58:09

一、前言

之前在问卷以及Q群上有同学有提出过能否将网页上的一些数据通过Airtest去导出生成一份Excel,那么我们今天一起讨论一下,我们应该如何去实现,以及当我们获取的数据类型不同的时候,获取的方式该怎么随之调整?

二、知识点介绍

2.1 python下的Excel的操作

之前我们有篇文章有介绍过poco跟Excel结合使用的案例,里面介绍了Excel的读写操作,在这里我们是使用了创建Excel,写入并保存Excel的操作。

import xlwings as xw
# 创建一个新的Excel工作簿和工作表
wb = xw.Book()
sheet = wb.sheets[0]

#将内容写入Excel内
sheet.range((row_index, col_index)).value = cell.text

# 保存Excel文件
wb.save('output.xlsx')
wb.close()
2.2 获取table数据

在网页上看到类似图下的表格内容时,可以在界面点击F12唤出页面开发者模式,可以看到表格在HTML中的标签为<table>,以及在表格中<tr>标签是表格的行, <td>标签是表格的列,我们只需要找到<table>标签,将表格内的行列内容以此读取并导出到Excel中或输出即可。

在这里插入图片描述

def get_table_data():
	#获取表格
	table = driver.find_element(By.XPATH, "//*[@id=\"content\"]/table")

    # 获取所有行
    rows = table.find_elements(By.TAG_NAME, "tr")

    # 行索引
    row_index = 1

    # 遍历所有行以及每行中的列
    for row in rows:
        # 获取所有列
        cells = row.find_elements(By.TAG_NAME, "td")
        # 列索引
        col_index = 1
        for cell in cells:
            # 写入每个格子的内容到Excel表格
            sheet.range((row_index, col_index)).value = cell.text
            col_index += 1
        row_index += 1
2.3 获取普通数据内容

如果是要将普通的数据依照一定的规律去进行导出的话,我们可以看一下在浏览器内,数据的表现是怎么样的,例如我们这边用的例子是百度热搜界面,想要将热搜榜导出,我们可以先观察一下热搜榜的HTML代码排布,热搜词条是在同一层级下按顺序排布的\

在这里插入图片描述
那我们可以看一下在AirtestIDE内获取的语句是否也存在一些规律,可以看到,我们在读取的时候,语句中的其中一个标签的索引值是呈递增的,那我们就可以利用这个特性去进行循环获取我们所需要的内容。
在这里插入图片描述

 # 循环获取XPath范围内的元素文本内容和链接
row_index = 1
for i in range(2, 11):  # 假设你要获取10个元素
	xpath = f"//*[@id='sanRoot']/main/div/div/div[2]/a[{i}]/div[2]/div[2]/div/div"

	# 查找元素
    element = driver.find_element(By.XPATH, xpath)

    # 获取元素文本内容
    content = element.text

    # 获取元素的父链接 (a 标签)
    parent_element = driver.find_element(By.XPATH, xpath + "/ancestor::a[1]")
    link = parent_element.get_attribute('href')

    # 写入Excel表格
    sheet.range((row_index, 1)).value = content
    sheet.range((row_index, 2)).value = link
    row_index += 1

三、使用Airtest-selenium获取网页上的table内容并生成excel

接下来我们先来看一个导出网页上的<table>表格数据到本地Excel表的例子:

在这里插入图片描述

参考代码:

# -*- encoding=utf8 -*-
__author__ = "Airtest"

from airtest.core.api import *

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from airtest_selenium.proxy import WebChrome
from selenium.webdriver.common.by import By
import xlwings as xw

driver = WebChrome()
driver.implicitly_wait(20)

auto_setup(__file__)

def get_table_data():
    # 获取所有行
    rows = table.find_elements(By.TAG_NAME, "tr")

    # 行索引
    row_index = 1

    # 遍历所有行以及每行中的列
    for row in rows:
        # 获取所有列
        cells = row.find_elements(By.TAG_NAME, "td")
        # 列索引
        col_index = 1
        for cell in cells:
            # 写入每个格子的内容到Excel表格
            sheet.range((row_index, col_index)).value = cell.text
            col_index += 1
        row_index += 1

if __name__ == "__main__":
        
    # 打开目标网页
    driver.get("https://www.runoob.com/python3/python3-os-file-methods.html")

    table = driver.find_element(By.XPATH, "//*[@id=\"content\"]/table")  

    # 创建一个新的Excel工作簿和工作表
    wb = xw.Book()
    sheet = wb.sheets[0]

    get_table_data()

    # 保存Excel文件
    wb.save('output.xlsx')
    wb.close()

四、使用Airtest-selenium获取网页上的热搜榜并导出标题以及链接

然后我们再来看一个更实用的例子,获取百度热搜榜单内容到本地Excel的例子(PS:运营同学甚至可以做成定时脚本,定时收集榜单信息参考,时刻关注热门话题):
在这里插入图片描述

参考代码:

# -*- encoding=utf8 -*-
__author__ = "Airtest"

from airtest.core.api import *

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from airtest_selenium.proxy import WebChrome
import xlwings as xw
from selenium.webdriver.common.by import By
driver = WebChrome()
driver.implicitly_wait(20)

auto_setup(__file__)

def get_element_content_and_link(xpath, sheet, row_index):
    try:
        # 查找元素
        element = driver.find_element(By.XPATH, xpath)
        # 获取元素文本内容
        content = element.text
        # 获取元素的父链接 (a 标签)
        parent_element = driver.find_element(By.XPATH, xpath + "/ancestor::a[1]")
        link = parent_element.get_attribute('href')

        # 写入Excel表格
        sheet.range((row_index, 1)).value = content
        sheet.range((row_index, 2)).value = link
        row_index += 1
    except Exception as e:
        print(f"元素 {xpath} 未找到: {e}")
    return row_index

if __name__ == "__main__":
    # 创建一个新的Excel工作簿和工作表
    wb = xw.Book()
    sheet = wb.sheets[0]    
    
    # 打开目标网页
    driver.get("https://top.baidu.com/board")  # 替换为你的目标网页URL

    # 行索引
    row_index = 1

    # 循环获取XPath范围内的元素文本内容和链接
    for i in range(2, 11):  # 假设你要获取10个元素
        xpath = f"//*[@id='sanRoot']/main/div/div/div[2]/a[{i}]/div[2]/div[2]/div/div"
        row_index = get_element_content_and_link(xpath, sheet, row_index)

    # 保存Excel文件,覆盖已存在的文件
    wb.save('output.xlsx')
    wb.close()

    # 关闭浏览器
    driver.quit()

五、小结

本周推文我们主要是讲了Airtest-selenium获取网页上两种不同数据并导出到Excel表的情况,主要是介绍了关于Airtest-seleniumExcel的协作,以及在获取不同数据内容的时候,我们应该如何去获取以及思考脚本思路。在实际应用过程,同学们可以根据自己的需求,去编写更加复杂和专业的脚本。

如果在测试的过程中,遇到了问题,或者有任何想要深入了解的知识点,欢迎在官方交流群(526033840)里告诉我们或者提交issue,也欢迎大家投稿其他不同的使用小技巧。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1872292.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

实现在父盒子中点击生成子盒子并识别父盒子边界不溢出

效果&#xff1a; 代码&#xff1a; <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</…

高级运维工程师讲述银河麒麟V10SP1服务器加固删除snmp服务引起keeplived莫名连带删除引起生产事故实战

高级运维工程师讲述银河麒麟V10SP1服务器加固删除snmp服务引起keeplived莫名连带删除引起生产事故实战 一、核实操作系统信息 uname -a Linux localhost.localdomain 4.19.90-23.8.v2101.ky10.x86_64 #1 SMP Mon May 17 17:08:34 CST 2021 x86_64 x86_64 x86_64 GNU/Linuxcat…

【AMBA】APB总线的个人学习记录(一):理论知识

精通APB (Advanced Peripheral Bus) 总线设计通常意味着你不仅理解其基础概念&#xff0c;而且能够在实际的硬件设计中灵活运用APB总线&#xff0c;解决复杂问题&#xff0c;并优化设计。以下是一些关键点&#xff0c;当你掌握这些方面时&#xff0c;可以说你对APB总线设计有了…

004-GeoGebra基础篇-GeoGebra的布局

注意&#xff0c;为保证大家的GeoGebra的学习顺利从基础、中级到高级的过度&#xff0c;本教程笔记有此要求&#xff1a; 必须使用英文版GeoGebra&#xff08;虽说GeoGebra也支持汉字写算式&#xff0c;但强烈不建议&#xff0c;因为一个英文翻译过来的中文真是五花八门&#…

网店管家婆与金蝶云星空对接集成往来单位查询接口打通客户新增

网店管家婆与金蝶云星空对接集成往来单位查询接口打通客户新增 对接系统网店管家婆 目前网上管家婆已服务超十万家海内外企业级用户&#xff0c;覆盖了服装配饰、食品酒水、数码3C、美妆日护、医疗保健、母婴用品、五金工具等等行业。 对接系统&#xff1a;金蝶云星空 金蝶K/3C…

如何高效管理TikTok账号?TK矩阵防关联测评养号引流系统揭秘

TK矩阵防关联测评自养号系统是为TikTok&#xff08;TK&#xff09;平台设计的&#xff0c;旨在帮助卖家实现多账号管理、防关联以及自动化测评和养号的功能。该系统通过一系列的技术手段和创新功能&#xff0c;为跨境电商运营者提供了强大的支持。 系统核心优势 1. 全球真实环…

5000字深入讲解:企业数字化转型优先从哪个板块开始?

很多企业都知道数字化转型重要&#xff0c;但不知道应该怎样入手&#xff0c;分哪些阶段。以下引用国内领先数字化服务商 织信Informat 的数字化转型方法论材料&#xff0c;且看看他们是如何看待数字化转型的&#xff1f;数字化转型应该从哪先开始&#xff1f;如何做&#xff1…

一个好玩的 AI 产品,一起来玩儿梗

欢迎贡献你的扎心梗图&#xff1a; - 万物皆可meme介绍&#xff1a;https://hqexj12b0g.feishu.cn/wiki/space/7385353047184375810 - 任何人都可以编辑的玩梗集&#xff1a;https://hqexj12b0g.feishu.cn/wiki/

Redis-Bitmap位图及其常用命令详解

1.Redis概述 2.Bitmap Bitmap 是 Redis 中的一种数据结构&#xff0c;用于表示位图&#xff08;bit array&#xff09;。 它通常用于处理大规模数据集中每个元素的状态&#xff0c;比如用户的在线/离线状态&#xff08;每个用户对应一个位&#xff0c;表示在线&#xff08;1&a…

【课程总结】Day12:YOLO的深入了解

前言 在【课程总结】Day11&#xff08;下&#xff09;&#xff1a;YOLO的入门使用一节中&#xff0c;我们已经了解YOLO的使用方法&#xff0c;使用过程非常简单&#xff0c;训练时只需要三行代码&#xff1a;引入YOLO&#xff0c;构建模型&#xff0c;训练模型&#xff1b;预测…

分类预测 | PSO-PNN基于粒子群算法优化概率神经网络的数据分类预测(Matlab)

分类预测 | ZOA-PCNN-AT-SVM斑马优化并行卷积-支持向量机融合注意力机制的故障识别 目录 分类预测 | ZOA-PCNN-AT-SVM斑马优化并行卷积-支持向量机融合注意力机制的故障识别分类效果基本描述程序设计参考资料 分类效果 基本描述 1.PSO-PNN基于粒子群算法优化概率神经网络的数据…

SQLite:一个极简使用教程

SQLite是一个轻量级的、文件系统基础的数据库&#xff0c;它被设计为配置简单、易于部署。SQLite数据库存储在一个单一的磁盘文件中&#xff0c;这意味着数据库的创建和维护都非常简单。 1. SQLite特点 轻量级&#xff1a;SQLite不需要一个独立的服务器进程。它是一个嵌入式SQ…

Steam夏促遇到社区打不开、社区进不去的处理措施一览

在Steam夏促中&#xff0c;绝大部分Steam游戏都会有折扣优惠&#xff0c;包括一些3A大作在夏促中也会降价售卖&#xff0c;玩家可以低价购买到自己心仪的游戏。不少玩家进入Steam社区查看游戏评价时遇到社区打不开、社区进不去的情况&#xff0c;不知道怎么解决&#xff0c;下面…

Pycharm一些问题解决办法

研究生期间遇到关于Pycharm一些问题报错以及解决办法的汇总 ModuleNotFoundError: No module named sklearn’ 安装机器学习库&#xff0c;需要注意报错的sklearn是scikit-learn缩写。 pip install scikit-learnPyCharm 导包提示 unresolved reference 描述&#xff1a;模块…

React小记(五)_Hooks入门到进阶

React 16.8 版本 类组件 和 函数组件 两种组件共存&#xff0c;到目前 React 18 版本&#xff0c;官方已经不在推荐使用类组件&#xff0c;在函数组件中 hooks 是必不可少的&#xff0c;它允许我们函数组件像类组件一样可以使用组件的状态&#xff0c;并模拟组件的生命周期等一…

新手向导:掌握Axure RP的第一步

其实很多时候&#xff0c;我们很容易把教程做得太复杂&#xff0c;让学生失去重点被复杂的理论吓到。入门基础的时候只需要先弄清楚两个核心内容&#xff0c;学起来就容易多了:一是简单了解这个软件&#xff0c;二是学习这个软件的基本操作。所以如果你问我什么是好的 Axure RP…

chrome 配置允许跨域

目录 1.Chrome跨域插件配置 1.1启动插件 1.2. 设置本地调试跨域 2 Firefox跨域插件 2.1. 安装插件 CORS Everywhere 2.2. 启动插件 3 工具下载链接 1.Chrome跨域插件配置 使用chrome插件“Allow CORS: Access-Control-Allow-origin ”来解决跨域问题。 点击pin图标&…

小语言模型SLM 百科全书

想象一下这样一个世界&#xff1a;智能助手不再驻留在云端&#xff0c;而是驻留在你的手机上&#xff0c;无缝理解你的需求并以闪电般的速度做出响应。这不是科幻小说&#xff1b;这是小型语言模型 (SLM) 的前景&#xff0c;这是一个快速发展的领域&#xff0c;有可能改变我们与…

倒装COB封装技术与常规SMD封装技术差异对比

倒装COB显示屏与常规SMD LED显示屏一个很大的差异点就是在于封装工艺的不同&#xff0c;COB&#xff08;Chip on Board&#xff09;封装和SMD&#xff08;Surface Mounted Device&#xff09;封装是LED显示屏领域中两种常见的技术&#xff0c;所表现出来的差异主要在于封装结构…

“卷王”新思路!孟德尔随机化联合共定位,IF冲上12+

今天分享的这篇文章很有意思&#xff0c;用上了统计学中的“顶流CP”孟德尔随机化贝叶斯共定位&#xff0c;强强联手&#xff0c;让孟德尔随机化不再单调&#xff01;本文思路清晰&#xff0c;设计严谨&#xff0c;结果可靠&#xff0c;想学习孟德尔随机化发文套路的千万不要错…