广告位联系
返回顶部
分享到

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

python 来源:互联网 作者:佚名 发布时间:2024-11-22 09:02:18 人浏览
摘要

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

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

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

一、准备工作

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

1

pip install selenium

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

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

1

2

3

from selenium import webdriver 

from PIL import Image 

import io

二、编写代码

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

1

2

driver = webdriver.Chrome('path/to/chromedriver') 

driver.get('http://example.com')

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

1

images = driver.find_elements_by_css_selector('img')

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

1

2

3

4

5

6

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

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

1

driver.quit()

三、注意事项

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

完整例子:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

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


版权声明 : 本文内容来源于互联网或用户自行发布贡献,该文观点仅代表原作者本人。本站仅提供信息存储空间服务和不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权, 违法违规的内容, 请发送邮件至2530232025#qq.cn(#换@)举报,一经查实,本站将立刻删除。
原文链接 :
相关文章
  • 本站所有内容来源于互联网或用户自行发布,本站仅提供信息存储空间服务,不拥有版权,不承担法律责任。如有侵犯您的权益,请您联系站长处理!
  • Copyright © 2017-2022 F11.CN All Rights Reserved. F11站长开发者网 版权所有 | 苏ICP备2022031554号-1 | 51LA统计