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

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') #获取图片列表的网址信息
​现在我也找了很多测试的朋友,做了一个分享技术的交流群,共享了很多我们收集的技术文档和视频教程。
如果你不想再体验自学时找不到资源,没人解答问题,坚持几天便放弃的感受
可以加入我们一起交流。而且还有很多在自动化,性能,安全,测试开发等等方面有一定建树的技术大牛
分享他们的经验,还会分享很多直播讲座和技术沙龙
可以免费学习!划重点!开源的!!!
qq群号:485187702【暗号:csdn11】

最后感谢每一个认真阅读我文章的人,看着粉丝一路的上涨和关注,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走! 希望能帮助到你!【100%无套路免费领取】

  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值