Selenium批量自動(dòng)化獲取并下載圖片
在現(xiàn)代的Web開發(fā)中,自動(dòng)化測(cè)試和數(shù)據(jù)抓取已經(jīng)成為不可或缺的一部分。Selenium作為一款強(qiáng)大的自動(dòng)化測(cè)試工具,不僅可以用于測(cè)試Web應(yīng)用,還可以用于批量獲取網(wǎng)頁(yè)上的圖片。本文將介紹如何使用Selenium批量自動(dòng)化獲取并下載圖片。
一、準(zhǔn)備工作
安裝Selenium:首先,你需要在你的系統(tǒng)中安裝Selenium。你可以使用pip來(lái)安裝:
pip install selenium
下載WebDriver:Selenium需要與WebDriver配合使用,WebDriver是一個(gè)瀏覽器驅(qū)動(dòng),用于執(zhí)行瀏覽器操作。你需要根據(jù)你的瀏覽器類型下載對(duì)應(yīng)的WebDriver。例如,如果你使用的是Chrome,你需要下載ChromeDriver。
導(dǎo)入必要的庫(kù):在Python腳本中,你需要導(dǎo)入Selenium的庫(kù)以及用于處理圖片的庫(kù)(如PIL)。
from selenium import webdriver
from PIL import Image
import io
二、編寫代碼
啟動(dòng)瀏覽器驅(qū)動(dòng):創(chuàng)建一個(gè)瀏覽器驅(qū)動(dòng)實(shí)例,并打開一個(gè)網(wǎng)頁(yè)。這里以Chrome為例:
driver = webdriver.Chrome('path/to/chromedriver')
driver.get('http://example.com')
查找圖片元素:使用Selenium的定位器(locators)來(lái)查找頁(yè)面上的圖片元素。你可以使用CSS選擇器、XPath等來(lái)定位圖片元素。例如,使用CSS選擇器定位所有的img標(biāo)簽:
images = driver.find_elements_by_css_selector('img')
下載圖片:對(duì)于每個(gè)找到的圖片元素,提取其src屬性,然后使用PIL庫(kù)下載圖片。這里是一個(gè)簡(jiǎn)單的示例:
for image in images:
image_url = image.get_attribute('src')
response = driver.execute_script("return fetch('" + image_url + "');")
image_data = response.content
image = Image.open(io.BytesIO(image_data))
image.save(image_url.split('/')[-1]) # 將圖片保存到本地,文件名保持不變
關(guān)閉瀏覽器驅(qū)動(dòng):完成圖片下載后,關(guān)閉瀏覽器驅(qū)動(dòng)。
driver.quit()
三、注意事項(xiàng)
跨域問(wèn)題:如果圖片來(lái)自于不同的域,你可能會(huì)遇到跨域問(wèn)題。在這種情況下,你需要處理瀏覽器的同源策略限制。一種解決方法是使用瀏覽器插件或服務(wù)來(lái)允許跨域請(qǐng)求。
圖片大小和分辨率:在下載圖片時(shí),你可能需要調(diào)整圖片的大小和分辨率以滿足你的需求。你可以在保存圖片時(shí)使用PIL庫(kù)的resize方法來(lái)調(diào)整圖片大小。例如:image.resize((width, height))。文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-814058.html
完整例子:文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-814058.html
from selenium import webdriver
from selenium.webdriver.common.by import By
import time
import requests
from io import BytesIO
from PIL import Image
def spider(url):
driver = webdriver.Chrome()
driver.get(url)
driver.maximize_window() # 窗口最大化
time.sleep(30)
a=1
for j in range(2,25):
try:
try:
for i in range(1,100):
a+=1
image_url=driver.find_element(By.XPATH,'//*[@id="sobey_editor_content"]/p/img[{}]'.format(i)).get_attribute("src")
print(image_url)
#//*[@id="root"]/div/div/div/div[1]/div/div[2]/div/div[3]/div/div/div/div[4]
#//*[@id="root"]/div/div/div/div[1]/div/div[2]/div/div[3]/div/div/div/div[23]
response = requests.get(image_url)
image_data = BytesIO(response.content)
image = Image.open(image_data)
image.save("image/{}.jpg".format(a))
print("{}下載成功".format(a))
except:
print("已下載完")
driver.find_element(By.XPATH,'//*[@id="root"]/div/div/div/div[1]/div/div[2]/div/div[3]/div/div/div/div[{}]'.format(j+1)).click()
time.sleep(0.5)
except:
print("未能下載。")
pass
driver.quit()
quit()
if __name__ == '__main__':
spider('https://yunquer.cn/web/#/Previewtextbook?contentId_=e8e86045f7a441e5828da5c3b21bcacc&uip=1')
到了這里,關(guān)于Selenium批量自動(dòng)化獲取并下載圖片的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!