文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

python selenium保存图片最好的两种方法分别是什么

2023-06-29 00:28

关注

今天给大家介绍一下python selenium保存图片最好的两种方法分别是什么。文章的内容小编觉得不错,现在给大家分享一下,觉得有需要的朋友可以了解一下,希望对大家有所帮助,下面跟着小编的思路一起来阅读吧。

selenium爬取页面时经常遇到要保存图片的需求,通常的做法是获取链接后用 requests 下载,但这种方法脱离了selenium环境,如遇到有校验的情况还需要绕过校验。

下面介绍两种直接通过selenium保存图片的方法:

1. 通过抓包

selenium-wire 是selenium扩展,它可以对所有请求抓包,同时还可以修改请求头,请求body,请求返回值等,功能非常强大。

selenium-wire 的使用和selenium一样,你只从seleniumwire导入webdriver就行,对于其他包还是从selenium导入

from selenium.webdriver.chrome.options import Optionsfrom seleniumwire.webdriver import Chromedriver = Chrome(options= Options())

下载图片有两种方法:

1-1.通过拦截器

通过拦截器预先把所有图片保存下来,要用到时在缓存目录中找

def get_img_path_from_url(url):    # 自行实现    return urldef 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_interceptordriver.get('...')src=driver.find_element_by_tag_name('img').get_attribute('src')img_path=get_img_path_from_url(src)

1-2. 请求后在所有请求中获取

这种方法有个缺点,浏览器会自动缓存图片,如果之前已经缓存过这张图片是不会有网络请求的

# 下载前先清理数据,不然请求太多del driver.requestsdriver.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 base64import osimport refrom io import BytesIOfrom PIL import Imagedef 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 imgjs = "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是一种跨平台的、具有解释性、编译性、互动性和面向对象的脚本语言,其最初的设计是用于编写自动化脚本,随着版本的不断更新和新功能的添加,常用于用于开发独立的项目和大型项目。

以上就是python selenium保存图片最好的两种方法分别是什么的全部内容了,更多与python selenium保存图片最好的两种方法分别是什么相关的内容可以搜索编程网之前的文章或者浏览下面的文章进行学习哈!相信小编会给大家增添更多知识,希望大家能够支持一下编程网!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯