欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

python?selenium保存圖片最好的兩種方法

 更新時間:2022年01月26日 16:38:30   作者:五十風(fēng)  
大家好,本篇文章主要講的是python?selenium保存圖片最好的兩種方法,感興趣的同學(xué)趕快來看一看吧,對你有幫助的話記得收藏一下

selenium爬取頁面時經(jīng)常遇到要保存圖片的需求,通常的做法是獲取鏈接后用 requests 下載,但這種方法脫離了selenium環(huán)境,如遇到有校驗的情況還需要繞過校驗。

下面介紹兩種直接通過selenium保存圖片的方法:

1. 通過抓包

selenium-wire 是selenium擴展,它可以對所有請求抓包,同時還可以修改請求頭,請求body,請求返回值等,功能非常強大。

selenium-wire 的使用和selenium一樣,你只從seleniumwire導(dǎo)入webdriver就行,對于其他包還是從selenium導(dǎo)入

from selenium.webdriver.chrome.options import Options
from seleniumwire.webdriver import Chrome

driver = Chrome(options= Options())

下載圖片有兩種方法:

1-1.通過攔截器

通過攔截器預(yù)先把所有圖片保存下來,要用到時在緩存目錄中找

def get_img_path_from_url(url):
    # 自行實現(xiàn)
    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)

1-2. 請求后在所有請求中獲取

這種方法有個缺點,瀏覽器會自動緩存圖片,如果之前已經(jīng)緩存過這張圖片是不會有網(wǎng)絡(luò)請求的

# 下載前先清理數(shù)據(jù),不然請求太多
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)

2. 通過canvas

使用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')

總結(jié)

到此這篇關(guān)于python selenium保存圖片最好的兩種方法的文章就介紹到這了,更多相關(guān)python selenium保存圖片內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • python實現(xiàn)可將字符轉(zhuǎn)換成大寫的tcp服務(wù)器實例

    python實現(xiàn)可將字符轉(zhuǎn)換成大寫的tcp服務(wù)器實例

    這篇文章主要介紹了python實現(xiàn)可將字符轉(zhuǎn)換成大寫的tcp服務(wù)器,通過tcp服務(wù)器端實現(xiàn)針對字符的轉(zhuǎn)換與返回功能,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-04-04
  • python本地降級pip的方法步驟

    python本地降級pip的方法步驟

    高版本的pip在使用過程中會出現(xiàn)很多的不兼容問題,而且不留神很容易把pip給升級了,下面這篇文章主要給大家介紹了關(guān)于python本地降級pip的方法步驟,文中通過圖文介紹的非常詳細,需要的朋友可以參考下
    2022-12-12
  • pytest配置文件pytest.ini的詳細使用

    pytest配置文件pytest.ini的詳細使用

    這篇文章主要介紹了pytest配置文件pytest.ini的詳細使用,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04
  • 推薦下python/ironpython:從入門到精通

    推薦下python/ironpython:從入門到精通

    推薦下python/ironpython:從入門到精通...
    2007-10-10
  • python實現(xiàn)查詢IP地址所在地

    python實現(xiàn)查詢IP地址所在地

    本文給大家分享的是使用Python實現(xiàn)根據(jù)ip138的API查詢IP的地理位置的代碼,非常的實用,推薦給大家,有需要的小伙伴可以參考下。
    2015-03-03
  • python3 使用ssh隧道連接mysql的操作

    python3 使用ssh隧道連接mysql的操作

    這篇文章主要介紹了python3 使用ssh隧道連接mysql的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12
  • python中import學(xué)習(xí)備忘筆記

    python中import學(xué)習(xí)備忘筆記

    python中的import語句是用來導(dǎo)入模塊的,在python模塊庫中有著大量的模塊可供使用,要想使用這些文件需要用import語句把指定模塊導(dǎo)入到當前程序中。下面這篇文章主要給大家介紹了python中import學(xué)習(xí)的相關(guān)資料,需要的朋友可以參考借鑒。
    2017-01-01
  • Python實現(xiàn)的多進程拷貝文件并顯示百分比功能示例

    Python實現(xiàn)的多進程拷貝文件并顯示百分比功能示例

    這篇文章主要介紹了Python實現(xiàn)的多進程拷貝文件并顯示百分比功能,涉及Python多進程、文件遍歷、拷貝等相關(guān)操作技巧,需要的朋友可以參考下
    2019-04-04
  • 利用python如何在前程無憂高效投遞簡歷

    利用python如何在前程無憂高效投遞簡歷

    這篇文章主要給大家介紹了關(guān)于利用python如何在前程無憂高效投遞簡歷的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家學(xué)習(xí)或者使用python具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-05-05
  • Pyramid將models.py文件的內(nèi)容分布到多個文件的方法

    Pyramid將models.py文件的內(nèi)容分布到多個文件的方法

    默認的Pyramid代碼結(jié)構(gòu)中,就只有一個models.py文件,在實際項目中,如果需要對models進行分類,放到不同文件下,應(yīng)該怎么辦
    2013-11-11

最新評論