selenium工具之实现网页截图、抠图等操作
selenium工具四种自带的四种网页截图方式
1、 save_screenshot(file_name/full_path) :获取截屏png格式图片,参数是文件名称,截屏必须是.png图片;如果入参只有文件名,截图会保存在项目的根目录下面。
注意:保存的文件,必须是以.png结尾的文件。否则会报警告。(.jpg结尾的文件同样可以保存,但会有报错提示)
2、 get_screenshot_as_file(file_name/full_path) :获取截屏png/jpg格式图片,参数是文件的绝对路径。如果入参只有文件名,截屏会存在项目的根目录下(与当前脚本同级)。
3、 get_screenshot_as_base64() :获取截屏的base64编码数据,在HTML界面输出截图时使用。
4、 get_screenshot_as_png() :获取获取截图的二进制数据流。
selenium工具截取整个Web网页(当出现网页太长浏览器一屏显示不下)
对浏览器中整个网页进行截图的时候只需要注意一点:当网页太长在浏览器里一屏显示不完的时候,需要修改窗口大小让完整网页能在一屏显示完全,否则会出现截图不全的情况。
具体代码如下:
from selenium import webdriver from PIL import Image import time url='https://cn.bing.com/search?q=pyspark' option=webdriver.ChromeOptions() # 静默模式(加载浏览器的静默模式,让它在后台偷偷运行) option.add_argument('headless') driver=webdriver.Chrome(options=option) driver.get(url) # 获取浏览器页面的滚动宽度 width = driver.execute_script("return document.documentElement.scrollWidth") # 获取浏览器页面的滚动高度 height = driver.execute_script("return document.documentElement.scrollHeight") # 修改浏览器窗口大小 driver.set_window_size(width,height) #获取整个网页截图 driver.get_screenshot_as_file('webpage.png') print("整个网页尺寸:height={},width={}".format(height,width)) im=Image.open('webpage.png') print("截图尺寸:height={},width={}".format(im.size[1],im.size[0])) # 输出结果: # 整个网页尺寸:height=2527,width=1164 # 截图尺寸:height=2527,width=1164
运行结果:
selenium工具截取web网页指定部分截图
对网页指定部分截图一般有两个思路:
1、一是直接使用selenium工具提供的 element.screenshot() 方法。
注意:此时的元素定位一定是一个块元素(是对要截取的网页部分整个元素框的定位)
from selenium import webdriver from PIL import Image import time url = 'https://cn.bing.com/search?q=pyspark' option = webdriver.ChromeOptions() option.add_argument('headless') driver = webdriver.Chrome(executable_path='/home/test/MyCode/Common/driver/chromedriver_102', options=option) driver.get(url) time.sleep(2) width = driver.execute_script("return document.documentElement.scrollWidth") height = driver.execute_script("return document.documentElement.scrollHeight") driver.set_window_size(width, height) # 修改浏览器窗口大小 # 对搜索结果部分完整截图 element = driver.find_element(by='xpath', value="//ol[@id='b_results']") # 在网页上获取该元素的高度和宽度 print('网页模块尺寸:height={},width={}'.format(element.size['height'], element.size['width'])) # 保存截图至与当前脚本同一目录下 element.screenshot('bing_results.png') im = Image.open('bing_results.png') # 图片截取并保存成功后使用第三方工具获取改图片的高度和宽度 print("截图尺寸:height={0}, width={1}".format(im.size[1], im.size[0])) # 运行结果: # 网页模块尺寸:height=3046,width=648 # 截图尺寸:height=3046, width=648
截图:
2、在得到的网页完整图片上利用第三方库按照元素块的四个顶点的位置进行抠图。
代码如下:
from selenium import webdriver from PIL import Image import time url = 'https://cn.bing.com/search?q=pyspark' option = webdriver.ChromeOptions() option.add_argument('headless') driver = webdriver.Chrome(executable_path='/home/test/MyCode/Common/driver/chromedriver_102', options=option) driver.get(url) time.sleep(2) width = driver.execute_script("return document.documentElement.scrollWidth") height = driver.execute_script("return document.documentElement.scrollHeight") driver.set_window_size(width, height) # 修改浏览器窗口大小 time.sleep(2) # 搜索结果部分完整截图 element = driver.find_element(by='xpath', value="//ol[@id='b_results']") print('网页模块尺寸:height={},width={}'.format(element.size['height'], element.size['width'])) ''' 使用抠图的方式获得网页指定部分的截图 ''' # 得到整个网页的完整截图 driver.get_screenshot_as_file('bing_results.png') # 第三方库打开该截图 webpage = Image.open('bing_results.png') # 定位element的四个顶点的位置 # 获取元素的X轴以及Y轴坐标 left, upper = element.location['x'], element.location['y'] right, bottom = left + element.size['width'], upper + element.size['height'] # 开始将完整的截图裁剪成指定的长 image_crop = webpage.crop(box=(left, upper, right, bottom)) image_crop.save('bing_results.png') image_crop = Image.open('bing_results.png') print("抠图尺寸:height={},width={}".format(image_crop.height, image_crop.width))
截图如下:
https://www.jianshu.com/p/3c6364bc5287
https://blog.csdn.net/yeshang_lady/article/details/122824626
去期待陌生,去拥抱惊喜。