您好,登錄后才能下訂單哦!
今天給大家介紹一下python selenium保存圖片最好的兩種方法分別是什么。文章的內容小編覺得不錯,現在給大家分享一下,覺得有需要的朋友可以了解一下,希望對大家有所幫助,下面跟著小編的思路一起來閱讀吧。
selenium
爬取頁面時經常遇到要保存圖片的需求,通常的做法是獲取鏈接后用 requests
下載,但這種方法脫離了selenium環境,如遇到有校驗的情況還需要繞過校驗。
下面介紹兩種直接通過selenium保存圖片的方法:
selenium-wire
是selenium擴展,它可以對所有請求抓包,同時還可以修改請求頭,請求body,請求返回值等,功能非常強大。
selenium-wire
的使用和selenium一樣,你只從seleniumwire導入webdriver就行,對于其他包還是從selenium導入
from selenium.webdriver.chrome.options import Options from seleniumwire.webdriver import Chrome driver = Chrome(options= Options())
下載圖片有兩種方法:
通過攔截器預先把所有圖片保存下來,要用到時在緩存目錄中找
def get_img_path_from_url(url): # 自行實現 return url def response_interceptor(request, response): t=response.headers['Content-Type'] if request.host=='xxx' and t and 'image' in t: with open(get_img_path_from_url(request.url), 'wb') as f: f.write(response.body) driver.response_interceptor = response_interceptor driver.get('...') src=driver.find_element_by_tag_name('img').get_attribute('src') img_path=get_img_path_from_url(src)
這種方法有個缺點,瀏覽器會自動緩存圖片,如果之前已經緩存過這張圖片是不會有網絡請求的
# 下載前先清理數據,不然請求太多 del driver.requests driver.get('...') src=driver.find_element_by_tag_name('img').get_attribute('src')</code> <code> for r in driver.iter_requests(): if r.url==src: with open('img', 'wb') as f: f.write(r.response.body)
使用js把圖片放到canvas中,然后獲取base64字符串,再保存
import base64 import os import re from io import BytesIO from PIL import Image def base64_to_image(base64_str): base64_data = re.sub('^data:image/.+;base64,', '', base64_str) byte_data = base64.b64decode(base64_data) image_data = BytesIO(byte_data) img = Image.open(image_data) return img js = "let c = document.createElement('canvas');let ctx = c.getContext('2d');" \ "let img = document.getElementsByTagName('img')[0]; /*找到圖片*/ " \ "c.height=img.naturalHeight;c.width=img.naturalWidth;" \ "ctx.drawImage(img, 0, 0,img.naturalWidth, img.naturalHeight);" \ "let base64String = c.toDataURL();return base64String;" base64_str = driver.execute_script(js) img = base64_to_image(base64_str) img.save('xx.png')
Python是一種跨平臺的、具有解釋性、編譯性、互動性和面向對象的腳本語言,其最初的設計是用于編寫自動化腳本,隨著版本的不斷更新和新功能的添加,常用于用于開發獨立的項目和大型項目。
以上就是python selenium保存圖片最好的兩種方法分別是什么的全部內容了,更多與python selenium保存圖片最好的兩種方法分別是什么相關的內容可以搜索億速云之前的文章或者瀏覽下面的文章進行學習哈!相信小編會給大家增添更多知識,希望大家能夠支持一下億速云!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。