Python使用Selenium批量自动化获取并下载图片的方法

 更新时间:2024年11月21日 10:56:42   作者:萧鼎  
在现代的Web开发中,自动化测试和数据抓取已经成为不可或缺的一部分,Selenium作为一款强大的自动化测试工具,可以用于批量获取网页上的图片,所以本文给大家介绍了Python如何使用Selenium批量自动化获取并下载图片的方法

Selenium批量自动化获取并下载图片

在现代的Web开发中,自动化测试和数据抓取已经成为不可或缺的一部分。Selenium作为一款强大的自动化测试工具,不仅可以用于测试Web应用,还可以用于批量获取网页上的图片。本文将介绍如何使用Selenium批量自动化获取并下载图片。

一、准备工作

安装Selenium:首先,你需要在你的系统中安装Selenium。你可以使用pip来安装:

pip install selenium

下载WebDriver:Selenium需要与WebDriver配合使用,WebDriver是一个浏览器驱动,用于执行浏览器操作。你需要根据你的浏览器类型下载对应的WebDriver。例如,如果你使用的是Chrome,你需要下载ChromeDriver。

导入必要的库:在Python脚本中,你需要导入Selenium的库以及用于处理图片的库(如PIL)。

from selenium import webdriver  
from PIL import Image  
import io

二、编写代码

启动浏览器驱动:创建一个浏览器驱动实例,并打开一个网页。这里以Chrome为例:

driver = webdriver.Chrome('path/to/chromedriver')  
driver.get('http://example.com')

查找图片元素:使用Selenium的定位 器(locators)来查找页面上的图片元素。你可以使用CSS选择器、XPath等来定位图片元素。例如,使用CSS选择器定位所有的img标签:

images = driver.find_elements_by_css_selector('img')

下载图片:对于每个找到的图片元素,提取其src属性,然后使用PIL库下载图片。这里是一个简单的示例:

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])  # 将图片保存到本地,文件名保持不变

关闭浏览器驱动:完成图片下载后,关闭浏览器驱动。

driver.quit()

三、注意事项

跨域问题:如果图片来自于不同的域,你可能会遇到跨域问题。在这种情况下,你需要处理浏览器的同源策略限制。一种解决方法是使用浏览器插件或服务来允许跨域请求。
图片大小和分辨率:在下载图片时,你可能需要调整图片的大小和分辨率以满足你的需求。你可以在保存图片时使用PIL库的resize方法来调整图片大小。例如:image.resize((width, height))。

完整例子:

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

到此这篇关于Python使用Selenium批量自动化获取并下载图片的方法的文章就介绍到这了,更多相关Python Selenium获取并下载图片内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Python实战之OpenCV实现猫脸检测

    Python实战之OpenCV实现猫脸检测

    今天给大家带来的是关于Python的相关知识,文章围绕着OpenCV实现猫脸检测展开,文中有非常详细的介绍及代码示例,需要的朋友可以参考下
    2021-06-06
  • Python的函数使用详解

    Python的函数使用详解

    大家好,本篇文章主要讲的是Python的函数使用详解,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下,方便下次浏览
    2021-12-12
  • Python 序列化 pickle/cPickle模块使用介绍

    Python 序列化 pickle/cPickle模块使用介绍

    这篇文章主要介绍了Python 序列化 pickle/cPickle模块使用介绍,需要的朋友可以参考下
    2014-11-11
  • 详解Python中的枚举类型

    详解Python中的枚举类型

    枚举(Enum)是一种数据类型,是绑定到唯一值的符号表示。。本文就来和大家聊聊Python中的枚举类型,为什么需要枚举类型,及如何使用
    2022-08-08
  • python OpenCV学习笔记之绘制直方图的方法

    python OpenCV学习笔记之绘制直方图的方法

    本篇文章主要介绍了python OpenCV学习笔记之绘制直方图的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-02-02
  • Python序列化基础知识(json/pickle)

    Python序列化基础知识(json/pickle)

    这篇文章主要为大家详细介绍了Python序列化json和pickle基础知识,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-10-10
  • Python tensorflow与pytorch的浮点运算数如何计算

    Python tensorflow与pytorch的浮点运算数如何计算

    这篇文章主要介绍了Python tensorflow与pytorch的浮点运算数如何计算,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习吧
    2022-11-11
  • python matlab库简单用法讲解

    python matlab库简单用法讲解

    在本篇文章里小编给大家整理了一篇关于python matlab库简单用法讲解内容,有需要的朋友们可以学习下。
    2020-12-12
  • python CMD命令行传参实现方法(argparse、click、fire)

    python CMD命令行传参实现方法(argparse、click、fire)

    这篇文章主要介绍了python CMD命令行传参实现方法(argparse、click、fire),本文通过实例代码给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧
    2024-07-07
  • Python时间和日期库的实现

    Python时间和日期库的实现

    这篇文章主要介绍了Python时间和日期库的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-03-03

最新评论