此文章來源於項目官方公衆號:“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