Airtest-Selenium實操小課③:下載可愛貓貓圖片

此文章來源於項目官方公衆號:“AirtestProject”
版權聲明:允許轉載,但轉載必須保留原鏈接;請勿用作商業或者非法用途

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 *
# 引入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 相關教程

4.2 參考腳本的有效性

請各位同學們不要過多依賴於我們給出的參考腳本,通常情況下,網頁的控件信息可能會隨着前端的改動而更新,所以我們的教程並不是永久有效的。

更多的是參考整體腳本的知識點,查漏補缺,讓自己在小實踐中對web自動化的熟練程度更高。也非常歡迎熱心同學給我們投稿~


AirtestIDE下載:airtest.netease.com/
Airtest 教程官網:airtest.doc.io.netease.com/
搭建企業私有云服務:airlab.163.com/b2b

官方答疑 Q 羣:117973773

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章