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

原创
01/24 16:00
阅读数 19


👆对私有云感兴趣可以进入公众号回复“有云哦。

1. 前言

上次实操小课分享,我们分享了如何使用Airtest-selenium实现自动化刷B站,还没看的同学可以戳 这里 回顾一下~
那么这周我们看看如何实现使用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 *
# 引入seleniumwebdriver模块
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 相关教程

4.2 参考脚本的有效性

请各位同学们不要过多依赖于我们给出的参考脚本,通常情况下,网页的控件信息可能会随着前端的改动而更新,所以我们的教程并不是永久有效的。
更多的是参考整体脚本的知识点,查漏补缺,让自己在小实践中对web自动化的熟练程度更高。也非常欢迎热心同学给我们投稿~
(猜你还想看
【更新公告】Airtest更新至1.3.3版本
Airtest-Selenium实操小课②:刷B站视频
Airtest-Selenium实操小课①:爬取新榜数据

本文分享自微信公众号 - AirtestProject(AirtestProject)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

展开阅读全文
加载中
点击引领话题📣 发布并加入讨论🔥
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部