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' ) |
查找图片元素:使用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__' : |
到此这篇关于Python使用Selenium批量自动化获取并下载图片的方法的文章就介绍到这了,更多相关Python Selenium获取并下载图片内容请搜索IT俱乐部以前的文章或继续浏览下面的相关文章希望大家以后多多支持IT俱乐部!