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

一、前言

之前在问卷以及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,也欢迎大家投稿其他不同的使用小技巧。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

MySQL InnoDB支持几种行格式

数据库表的行格式决定了一行数据是如何进行物理存储的&#xff0c;进而影响查询和DML操作的性能。 在InnoDB中&#xff0c;常见的行格式有4种&#xff1a; 1、COMPACT&#xff1a;是MySQL 5.0之前的默认格式&#xff0c;除了保存字段值外&#xff0c;还会利用空值列表保存null…

如何使用git将本地文件夹提交至云效代码库

目录 引言 一、准备工作 二、配置Git用户信息 三、克隆代码库到本地 四、添加文件至Git仓库 五、推送更改至云效代码库 六、如何删除云效文件 七、注意事项 八、总结 引言 随着团队协作开发的日益普及&#xff0c;代码版本控制系统&#xff08;VCS&#xff09;如Git已…

java+mysql图书管理系统

完整代码地址 1.运行效果图 2.主要代码 2.1.连接数据库 package com.my.homework.utils;import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException;public class JDBCUtils {public static Connection getConnection() throws Exception {…

力压GPT-4o!新王Claude 3.5 Sonnet来了,直接免费可用

如今&#xff0c;大模型领域更卷了&#xff01; 前脚 OpenAI 发布 GPT4o&#xff0c;硬控全场&#xff0c;后脚就被最大的竞争对手 Anthropic 超越了。 刚刚&#xff0c;Anthropic 发布了全新大模型 Claude 3.5 Sonnet&#xff0c;号称是迄今为止最智能的模型。 据介绍&#x…

CSS|05 继承性与优先级

继承性 一、继承性的特点&#xff1a; 1.外层元素身上的样式会被内层元素所继承 2.如果内层元素与外层元素身上的演示相同时&#xff0c;外层元素的样式会被内层元素所覆盖 二、关于继承性的问题 是不是所有样式都能被继承&#xff1f; 答&#xff1a;并不是所有样式能被继承…

图像处理Python库--图片裁剪、缩放、灰度图、圆角等

图像处理Python库 py-img-processor1. 安装2. 使用(Usage)2.1 运行配置2.2 图像处理处理函数图像处理参数为字符串图像处理参数为JSON 命令行提取图像主色调 py-img-processor Image editor using Python and Pillow. 依赖Pillow开发的Python库&#xff0c;用于图像编辑处理。…

Excel数据恢复,4个技巧挽救重要数据

在数字化时代&#xff0c;Excel表格已经成为我们工作、学习乃至生活中不可或缺的一部分。它们承载着我们的数据、计划、分析和决策&#xff0c;如同一张张承载着智慧与汗水的地图&#xff0c;指引我们前行。然而&#xff0c;当这些宝贵的数据意外丢失或被误删时&#xff0c;我们…

【Linux操作系统】进程地址空间与动态库加载

当系统执行一个依赖动态库的可执行程序时&#xff0c;系统不仅要将该可执行程序加载到内存中还要由加载器将动态库加载到内存中&#xff08;静态库没有&#xff09;&#xff0c;因此必须要让加载器知道该动态库的名称&#xff0c;系统会默认在/lib64路径下查找&#xff0c;解决…

I/O系统

1. I/O接口 接口可以看做两个系统或两个部件之间的交接部分&#xff0c;它既可以是两种硬设备之间的连接电路&#xff0c;也可以是两个软件之间的共同逻辑边界。 I/O接口通常是指主机与I/O设备之间设置的一个硬件电路及其相应的软件控制。 2. 程序查询方式 程序查询方式是一…

深圳比创达|EMC与EMI一站式解决方案:从源头解决,满足您的需求

随着科技的飞速发展&#xff0c;电子产品日益普及&#xff0c;电磁兼容性&#xff08;EMC&#xff09;与电磁干扰&#xff08;EMI&#xff09;问题也逐渐凸显。 一、EMC与EMI的概述 EMC&#xff08;电磁兼容性&#xff09;是指电子设备在共同的电磁环境中能执行各自功能的互不…

TTS x Hallo: 免费数字人头在线生成

是一个利用了百度 Hallo 和 Parler/WhisperSpeech TTS 项目实现的可说话、嘴型匹配的数字人头在线 Space

向日葵API集成服务:三大优势助力企业搭建专属远控方案

为了方便企业用户更加灵活的搭建满足各自需求的软件解决方案&#xff0c;降低开发和部署门槛&#xff0c;很多软件方案供应商提供了多样化的合作模式。 以贝锐向日葵远程控制为例&#xff0c;他们就向客户提供了基础的SaaS服务模式、私有化部署模式、SDK嵌入模式&#xff0c;以…

VUE模板语法(超详细讲解)

大家好&#xff0c;我是DX3906&#xff0c;坚持从工作和生活中不断学习&#xff0c;提炼&#xff0c;沉淀&#xff0c;最终建立自己的强势领域&#xff01; Vue 使用一种基于 HTML 的模板语法&#xff0c;使我们能够声明式地将其组件实例的数据绑定到呈现的 DOM 上。所有的 Vue…

设计模式原则——接口隔离原则

设计模式原则 设计模式示例代码库地址&#xff1a; https://gitee.com/Jasonpupil/designPatterns 接口隔离原则 要求程序员尽量将臃肿庞大的接口拆分为更小的和更具体的接口&#xff0c;让接口中只包含客户感兴趣的方法接口隔离原则的目标是降低类或模块之间的耦合度&…

文华财经7macd预警指标公式源码

文华财经7macd预警指标公式源码&#xff1a; DIFF:EMA(CLOSE,12) - EMA(CLOSE,26); DEA:EMA(DIFF,9); MACD:2*(DIFF-DEA),COLORSTICK; JC:CROSS(DIFF,DEA); SC:CROSSDOWN(DIFF,DEA); N1:BARSLAST(JC)1; N2:BARSLAST(SC)1; X:(HHV(H,N16)-LLV(L,N16))/LLV(L,N16)*100; …

D13005-ASEMI低频开关三极管D13005

编辑&#xff1a;ll D13005-ASEMI低频开关三极管D13005 型号&#xff1a;D13005 品牌&#xff1a;ASEMI 封装&#xff1a;TO-220 批号&#xff1a;2024 沟道&#xff1a;NPN 电流&#xff1a;4A 电压&#xff1a;400V 安装方式&#xff1a;直插式封装 特性&#xff1…

idea配置JAVA

idea项目用的gradle&#xff0c;配置项目java两个地方 1、project structure 菜单&#xff1a; file-》project structure&#xff0c;如图设置你要的java&#xff0c;如果没有&#xff0c;就点击Add SDK增加你要的版本并选择 2、settings 菜单&#xff1a; file-》settings

一站式AI服务平台:MaynorAI助您轻松驾驭人工智能

一站式AI服务平台&#xff1a;MaynorAI助您轻松驾驭人工智能 在当前的数字化时代&#xff0c;人工智能&#xff08;AI&#xff09;技术已经成为推动各行各业创新发展的核心动力。为了更好地满足企业和个人用户对AI服务的需求&#xff0c;MaynorAI 作为一个领先的一站式调用国内…

分享HTML显示2D/3D粒子时钟

效果截图 实现代码 线上体验&#xff1a;three.jscannon.js Web 3D <!DOCTYPE html> <head> <title>three.jscannon.js Web 3D</title><meta charset"utf-8"><meta name"viewport" content"widthdevice-width,ini…

【UE开发】游戏库存UI系统Demo

1.项目介绍 1.描述&#xff1a;一种用于存储记录玩家物品的游戏内可视化操作系统。 2.演示&#xff1a;https://www.bilibili.com/video/BV1f53neVEfW/?vd_source50dea901fd12253f417c48b937975b0d 3.大纲&#xff1a; 4.样式&#xff1a; 2.W_Inventory_Main_01&#xff08;…