Airtest-Selenium实操小课③:下载可爱猫猫图片

news2025/1/24 22:44:21

1. 前言

那么这周我们看看如何实现使用Airtest-Selenium实现自动搜索下载可爱的猫猫图片吧~

2. 需求分析和准备

整体的需求大致可以分为以下步骤:

  • 打开chrome浏览器

  • 打开百度网页

  • 搜索“可爱猫猫图片”

  • 定位图片元素

  • 创建存储图片的文件夹

  • 下载可爱猫猫图片到文件夹内

在写脚本之前,我们需要准备好社区版AirtestIDE,设置好chrome.exe和对应的driver;并且确保我们的chrome浏览器版本不是太高以及selenium是4.0以下即可(这些兼容问题我们都会在后续的版本修复)。

3. 脚本实现与运行效果

3.1 脚本运行效果

我们在编写脚本时,我们要先明确好代码思路,首先下载图片先要找到对应的图片,在下载前需要先确认图片存储的地方,确认好后就可以进行下载啦。在本次代码编写的时候,我们使用了requests.get的方式去下载图片,目前使用request库里的操作去获取网络上的资源,会更方便快捷,让我们看看脚本实现的效果吧~

3.2 完整代码分享

这里也附上完整的示例代码给大家参考,有需要的同学可以自取学习哦:

# -*- encoding=utf8 -*-
 
from airtest.core.api import *
# 引入selenium的webdriver模块
from airtest_selenium.proxy import WebChrome
import requests
from selenium.webdriver.common.by import By
 
 
 
def download_image(url, save_path):                    #下载图片
    response = requests.get(url, stream=True)
    
    if response.status_code == 200:                    #网页可以正常访问
        with open(save_path, 'wb') as file:
            for chunk in response.iter_content(1024):  
                file.write(chunk)
        print("图片下载完成!")
    else:
        print("下载失败。")
 
 
def start_selenium():
    # 创建一个实例,代码运行到这里,会打开一个chrome浏览器
    driver = WebChrome()
    driver.implicitly_wait(20)
    
    driver.get("https://www.baidu.com/")
    # 输入搜索关键词并提交搜索
    search_box = driver.find_element_by_name('wd')
    search_box.send_keys('可爱猫猫图片')
    search_box.submit()
 
    # 定位搜索结果中的图片元素
    image_elements = driver.find_elements(By.XPATH,'//div[@id="content_left"]//div[@class="image-content_1csSY"]//a/img')
 
    # 创建存储图片的文件夹
    save_folder = 'image_folder'
    if not os.path.exists(save_folder):
        os.makedirs(save_folder)
    index = 0
    
    # 循环保存图片
    for i in image_elements:
        image_url = i.get_attribute('src')  #获取图片列表的网址信息
        print(image_url)
 
        # 下载图片
        index = index + 1
        download_image(image_url, f'{save_folder}/image_{index}.jpg')
 
 
if __name__ == "__main__":
    start_selenium()
3.2 重要知识点
1)获取下载文件

requests.get()会将请求的响应内容全部下载到内存中,然后再返回给调用者。其中stream默认情况下是stream=False,但是如果文件过大就会导致内存不足的情况,所以这里使用流式传输的方式去进行下载。

 response = requests.get(url, stream=True)
2)一块一块的遍历要下载的内容

get函数的stream参数设置成True时,它不会立即开始下载,使用iter_content遍历内容或访问内容属性时才开始下载。

iter_content:分块去遍历要下载的内容,括号内的数字代表chunk_size处理数据时的块大小,单位是B(字节)

使用该函数下载大文件可以防止占用过多的内存,每次只下载小部分数据。

with open(save_path, 'wb') as file:
            for chunk in response.iter_content(1024):  
                file.write(chunk)
3)创建存储图片的文件夹

先判断文件夹是否存在,若不存在则在路径(默认为脚本文件目录下)下创建一个文件夹

 if not os.path.exists(save_folder):
        os.makedirs(save_folder)
4)获取图片的网址信息

element.get_attribute(name):获得element的属性值。name可以是页面元素所含的属性名。

例如:

src:图片

textContent:标签之间的文本内容

innerHTML:标签之间的完整HTML内容

等等.....

image_url = i.get_attribute('src') #获取图片列表的网址信息

4. 注意事项与小结

4.1 相关教程
  • 如何使用AirtestIDE生产web自动化脚本

  • 如何使用Airtest-selenium进行web端的页面元素交互

  • 如何设置chromedriver以及一些常见的web脚本问题

  • 为什么AirtestIDE无法检索web控件?

4.2 参考脚本的有效性

请各位同学们不要过多依赖于我们给出的参考脚本,通常情况下,网页的控件信息可能会随着前端的改动而更新,所以我们的教程并不是永久有效的。

更多的是参考整体脚本的知识点,查漏补缺,让自己在小实践中对web自动化的熟练程度更高。也非常欢迎热心同学给我们投稿~

作为一个软件测试的过来人,我想尽自己最大的努力,帮助每一个伙伴都能顺利找到工作。所以我整理了下面这份资源,现在免费分享给大家,有需要的小伙伴可以关注【公众号:开心螺蛳粉】自提!

软件测试面试文档

我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。在这里插入图片描述

在这里插入图片描述

行动吧,在路上总比一直观望的要好,未来的你肯定会感谢现在拼搏的自己!如果想学习提升找不到资料,没人答疑解惑时,请及时加入群:1150305204,里面有各种测试开发资料和技术可以一起交流哦。

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

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

相关文章

2024最新互联网大厂面试题,(java,python,vue)

最近又赶上跳槽的高峰期,好多粉丝,都问我要有没有最新面试题,索性,我就把我看过的和我面试中的真题,及答案都整理好,整理了《第3版:互联网大厂面试题》并分类150份 PDF,累计 7701页&…

消息中间件篇之Kafka-高可用机制

一、 集群模式 1. Kafka的服务器端由被称为Broker的服务进程构成,即一个Kafka集群由多个Broker组成。 2. 这样如果集群中某一台机器宕机,其他机器上的 Broker 也依然能够对外提供服务。这其实就是 Kafka 提供高可用的手段之一。 二、分区备份机制 1. 一个…

centos升级g++.v6.1.0版本

1.下载源码包 wget http://ftp.gnu.org/gnu/gcc/gcc-6.1.0/gcc-6.1.0.tar.gz tar -zxvf gcc-6.1.0.tar.gz cd gcc-6.1.0 2.打开 download_prerequisites 脚本 vim contrib/download_prerequisites 可以看到该文件就是执行一些下载指令,需要下载几个包&#xff0c…

H5 个人引导页隐藏特效源码

H5 个人引导页隐藏特效源码 源码介绍:源码无后台、无数据库,H5自适应、无加密,直接修改可用。 源码可跳转五个选项、带隐藏特效开关,可随时开关特效、带微信|支付宝|QQ二维码、带行星飘落特效、带背景音乐 下载地址:…

实战 vue3 使用百度编辑器ueditor

前言 在开发项目由于需求vue自带对编辑器不能满足使用,所以改为百度编辑器,但是在网上搜索发现都讲得非常乱,所以写一篇使用流程的文章 提示:以下是本篇文章正文内容,下面案例可供参考 一、下载ueditor编辑器 一个“…

离线数仓(四)【数仓数据同步策略】

前言 今天来把数仓数据同步解决掉,前面我们已经把日志数据到 Kafka 的通道打通了。 1、实时数仓数据同步 关于实时数仓,我们的 Flink 直接去 Kafka 读取即可,我们在学习 Flink 的时候也知道 Flink 提供了 Kafka Source,所以这里不…

如何改变.net托管的入口main函数

有小伙伴问: .NET托管入口Main函数可以修改成别的函数,用来作为程序的入口吗? 答案:当然是可以的。这也算是.NET里面非常简单的骚操了。本篇来用最新的.NET8演示下,如何修改Main入口。 1.简单控制台例子: namespace…

Git Windows安装教程

Git简介 Git是目前世界上最先进的分布式版本控制系统。它的工作原理 / 流程如下: [ Workspace:工作区 Index / Stage:暂存区 Repository:仓库区(或本地仓库) Remote:远程仓库 ] Git的下载 去 Git 官网下载对应系统的软件了,下…

七、防御保护---VPN篇

七、防御保护---VPN篇 一、VPN介绍二、VPN的分类2.1 根据建设的单位不同分类2.2 根据组网方式不同分类2.3 根据应用场景不同分类2.4 按照VPN技术实现的网络层次进行分类: 三、VPN的核心技术3.1 隧道技术3.2 身份认证技术3.3 加密技术3.4 数据验证技术 一、VPN介绍 …

pop链构造 [NISACTF 2022]babyserialize

打开题目 题目源代码如下 <?php include "waf.php"; class NISA{public $fun"show_me_flag";public $txw4ever;public function __wakeup(){if($this->fun"show_me_flag"){hint();}}function __call($from,$val){$this->fun$val[0];…

【GB28181】wvp-GB28181-pro部署安装教程(Ubuntu平台)

目录 前言1 安装依赖2 安装MySQL3 安装redis4 编译ZLMediaKit代码及依赖下载编译运行&#xff08;如果要运行wvp整个项目&#xff0c;这步可以先不执行&#xff09; 5 编译wvp-pro下载源码&#xff08;建议从github上下载&#xff0c;gitee上维护有时候不是很同步&#xff09;编…

QT C++实现点击按键弹出窗口并显示图片/视频|多窗口应用程序的设计和开发

一、介绍 首先&#xff0c;QT界面开发中主要大体分为2种多窗口的形式&#xff1a; 嵌入式&#xff1a; 新生成的窗口嵌入在主窗口内部独立窗口&#xff1a; 以弹窗形式的新窗口生成和展示 这里就讲解最简单的&#xff1a;点击案件后&#xff0c;跳出一个新窗口 二、代码实…

IntelliJ IDEA 2023:创新不止步,开发更自由 mac/win版

IntelliJ IDEA 2023激活版是一款强大而智能的集成开发环境(IDE)&#xff0c;为开发者提供了一系列先进的功能和工具&#xff0c;帮助他们更高效地编写、调试和测试代码。 IntelliJ IDEA 2023 软件获取 IntelliJ IDEA 2023继承了其前代版本的优秀基因&#xff0c;并在此基础上进…

raft选举算法和zookeeper选举算法的优略

RAFT&#xff08;Replicated State Machine&#xff09;选举算法和ZooKeeper选举算法都是分布式系统中常用的选举算法&#xff0c;用于确定系统中的主节点或领导者。它们有各自的优劣势&#xff0c;下面是对它们进行的简要比较&#xff1a; RAFT选举算法&#xff1a; 优势&a…

【Hudi】调优指南

1 并行度 2 Off-heap (堆外)内存 3 Spark内存 4 调整文件大小 5 时间序列/日志数据 6 GC调优 7 OutOfMemory

机器学习:朴素贝叶斯算法(Python)

一、朴素贝叶斯算法的实现 naive_bayes_classifier.py import numpy as np import collections as cc # 集合的计数功能 from scipy.stats import norm # 极大似然估计样本的均值和标准方差 from data_bin_wrapper import DataBinsWrapperclass NaiveBayesClassifier:"…

leetcode:134.加油站

解题思路&#xff1a;需要注意开始时的编号&#xff0c;有的可以走一圈&#xff0c;有的走不了 模拟过程&#xff1a;for循环主要是用来模拟线性的过程&#xff0c;而在这里它是环状的&#xff1b; 可以用暴力解法&#xff0c;但是在这里我用贪心来解决。 常见疑惑&#xff1…

一文详细拆解Agent工作原理

一、写在前面 Agent&#xff0c;中文译为“代理”或“智能体”&#xff0c;是一种能够在特定环境中自主行动、感知环境、做出决策并与其他Agent或人类进行交互的计算机程序或实体。它们具备自主性、反应性、社交性和适应性等特点&#xff0c;能够根据环境的变化调整自己的行为…

vue3项目中动态加载字体,并解决字体图标显示异常问题

先上效果图 setIconfont.ts文件代码 // 字体图标 url // 为什么引入俩个版本的font-awesome图标&#xff0c;因为最新版本的图标需要匹配字体库&#xff0c;单独引入样式文件部分图标会不显示 // 测试发现在引入4.7.0中的样式后所有的图标都可以显示&#xff0c;暂且认为4.7…

蓝桥杯备战刷题one(自用)

1.被污染的支票 #include <iostream> #include <vector> #include <map> #include <algorithm> using namespace std; int main() {int n;cin>>n;vector<int>L;map<int,int>mp;bool ok0;int num;for(int i1;i<n;i){cin>>nu…