最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

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

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

1. 通過抓包

selenium-wire 是selenium擴(kuò)展,它可以對(duì)所有請(qǐng)求抓包,同時(shí)還可以修改請(qǐng)求頭,請(qǐng)求body,請(qǐng)求返回值等,功能非常強(qiáng)大。

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

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

driver = Chrome(options= Options())

下載圖片有兩種方法:

1-1.通過攔截器

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

def get_img_path_from_url(url):
    # 自行實(shí)現(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. 請(qǐng)求后在所有請(qǐng)求中獲取

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

# 下載前先清理數(shù)據(jù),不然請(qǐng)求太多
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)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論

黎城县| 临颍县| 彭泽县| 南京市| 阿拉善左旗| 忻州市| 梧州市| 宁海县| 成安县| 筠连县| 疏勒县| 海宁市| 鹿泉市| 闸北区| 登封市| 丹棱县| 灵石县| 平江县| 上犹县| 苗栗县| 海宁市| 伊金霍洛旗| 来安县| 敖汉旗| 陇西县| 长葛市| 肇州县| 咸丰县| 定西市| 阿鲁科尔沁旗| 乐陵市| 大余县| 石河子市| 谷城县| 明光市| 长丰县| 怀来县| 额尔古纳市| 临颍县| 泉州市| 普洱|