Selenium 自动化截取网页指定区域截图

一. 需求

在本篇博客中,我将分享一段使用Python编写的自动化网页截图代码,该代码基于Selenium和PIL库,可用于截取网页中指定区域的截图。这样的功能对于需要定期监控特定网页内容或进行网页数据采集的任务非常有用。

二. 代码解析

首先,我们使用Selenium库启动了一个Chrome浏览器,并通过设置选项隐藏了浏览器自动化控制提示。代码还实现了全屏效果,类似于按下F11键。

import time
from selenium import webdriver
from PIL import Image# 启动浏览器
chrome_options = webdriver.ChromeOptions()
# 隐藏浏览器自动化控制提示
chrome_options.add_experimental_option('excludeSwitches', ['enable-automation'])# 添加谷歌浏览器驱动位置
# chrome_options.binary_location = r"E:\应用\谷歌浏览器插件\chrome-win64\chrome.exe"# 加载启动项页面全屏效果,相当于F11。
chrome_options.add_argument("--kiosk")# 配置初始化
driver = webdriver.Chrome(options=chrome_options)

然后,我们打开了指定的网页,并获取了页面的宽度和高度。

# 打开页面
url = 'https://baidu.com'  # 请替换为你要打开的页面
driver.get(url)# 获取页面宽度与高度
hight,width = 'return document.body.clientHeight','return document.body.clientWidth'
h,w = driver.execute_script(hight),driver.execute_script(width)
print(w,h)

接下来,我们指定了要截取的区域的坐标,并使用Selenium的save_screenshot方法保存整个页面的截图。

# 指定四个点的坐标,这里以左上角和右下角的坐标为例
# x1起始宽度到 x2最大宽度的距离
# y1起始高度到 y2最大高度的距离
x1, y1 = 0, 0  # 左上角坐标
x2, y2 = w, h-600  # 右下角坐标# 获取整个页面截图
screenshot_path = 'screenshot.png'
driver.save_screenshot(screenshot_path)

随后,我们使用PIL库打开整个页面的截图,并通过crop方法截取指定区域。最后,保存截取的区域截图及关闭浏览器

# 截取指定区域
im = Image.open(screenshot_path)
region = im.crop((x1, y1, x2, y2))# 保存截图
cropped_path = 'result_screenshot.png'
region.save(cropped_path)# 关闭浏览器
driver.close()

三. 总结 

1. 完整代码

import timefrom selenium import webdriver
from PIL import Image# 启动浏览器
# 隐藏浏览器自动化控制提示
chrome_options = webdriver.ChromeOptions()
chrome_options.add_experimental_option('excludeSwitches', ['enable-automation'])# 添加谷歌浏览器驱动位置
# chrome_options.binary_location = r"E:\应用\谷歌浏览器插件\chrome-win64\chrome.exe"# 加载启动项页面全屏效果,相当于F11。
chrome_options.add_argument("--kiosk")# 配置初始化
driver = webdriver.Chrome(options=chrome_options)# 打开页面
url = 'https://baidu.com'  # 请替换为你要打开的页面
driver.get(url)# 获取页面宽度与高度
hight,width = 'return document.body.clientHeight','return document.body.clientWidth'
h,w = driver.execute_script(hight),driver.execute_script(width)
print(w,h)# 指定四个点的坐标,这里以左上角和右下角的坐标为例
# x1起始宽度到 x2最大宽度的距离
# y1起始高度到 y2最大高度的距离
x1, y1 = 0, 0  # 左上角坐标
x2, y2 = w, h-600  # 右下角坐标# 获取整个页面截图
screenshot_path = 'screenshot.png'
driver.save_screenshot(screenshot_path)time.sleep(3)# 截取指定区域
im = Image.open(screenshot_path)
region = im.crop((x1, y1, x2, y2))# 保存截图
cropped_path = 'result_screenshot.png'
region.save(cropped_path)# 关闭浏览器
driver.close()
  • 将代码中的网页链接和截取区域坐标调整为你想要的值。

  • 运行代码,即可生成指定区域的网页截图。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/640722.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

中间件存储设计 - 数组与链表

文章目录 数组ArrayListLinkedListHashMap小结 中间件主要包括如下三方面的基础:数据结构、JUC 和 Netty,接下来,我们先讲数据结构。 数据结构主要解决的是数据的存储方式问题,是程序设计的基座。 按照重要性和复杂程度&#xf…

Python fork方法:创建新进程

除可以进行多线程编程之外,Python 还支持使用多进程来实现并发编程。 Python 的 os 模块提供了一个 fork() 方法,该方法可以 fork 出来一个子进程。简单来说,fork() 方法的作用在于,程序会启动两个进程(一个是父进程&…

《WebKit 技术内幕》学习之十(1): 插件与JavaScript扩展

虽然目前的浏览器的功能很强 ,但仍然有其局限性。早期的浏览器能力十分有限,Web前端开发者希望能够通过一定的机制来扩展浏览器的能力。早期的方法就是插件机制,现在流行次啊用混合编程(Hybird Programming)模式。插件…

大模型实战营 Day5作业

基础作业: 使用 LMDeploy 以本地对话、网页Gradio、API服务中的一种方式部署 InternLM-Chat-7B 模型,生成 300 字的小故事(需截图) TurboMind 推理命令行本地对话 lmdeploy chat turbomind /share/temp/model_repos/internlm-cha…

RK3568平台 TinyAlsa集成第三方音频算法

一.tinyalsa介绍 ALSA(Advanced Linux Sound Architecture)是一个开源项目,涵盖了用户空间和内核空间对音频设备的操作接口,通过应用层使用alsalib可以实现对音频设备的控制 TinyAlsa是android推出的一个精简的ALSA库&#xff0c…

c++中STL的vector简单实现

文章目录 vector构造函数 vector()拷贝构造 vector()析构函数 ~vector()iterator 的定义begin()与const版本end()与const版本增删改查尾插push_back()尾删pop_back()指定位置插入insert()指定位置删除 erase() operator[]与const版本容量增容reserve()设置容量 resize() 成员函…

npm源更换、卡住解决方式

sill idealTree buildDeps解决方案 1. 删除用户C:\Users\{账户}\下的.npmrc文件 2. npm cache verify 3. npm config set registry https://registry.npmmirror.com更换镜像源 //任选其一 npm config set registry https://registry.npmmirror.com npm config set registry h…

Python 基于pytorch从头写GPT模型;实现gpt实战

1.定义缩放点积注意力类 import numpy as np # 导入 numpy 库 import torch # 导入 torch 库 import torch.nn as nn # 导入 torch.nn 库 d_k 64 # K(Q) 维度 d_v 64 # V 维度 # 定义缩放点积注意力类 class ScaledDotProductAttention(nn.Module):def __init__(self):super…

spring boot kafka 发送消息 完整的例子工程

以下是一个简单的Spring Boot Kafka发送消息的完整例子&#xff1a; 首先&#xff0c;添加Spring Boot Kafka的依赖到你的pom.xml文件&#xff1a; xml <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId…

【教程】npm的时候ssh报错ssh://git@github.com/frozeman/bignumber.js-nolookahead.git

问题&#xff1a; fiscoubuntu:~/fisco/benchmarks$ npm install install web30.20.7 npm ERR! code 128 npm ERR! An unknown git error occurred npm ERR! command git --no-replace-objects ls-remote ssh://gitgithub.com/frozeman/bignumber.js-nolookahead.git npm ERR! …

DAY27:回溯(组合问题39、40、分割回文串131)

Leetcode: 39 组合总和 基本思路 本题没有组合数字的要求&#xff0c;只有对组合总和的要求&#xff0c;因此返回条件有两个&#xff0c;等于sum的时候收集结果&#xff0c;如果大于sum了就直接跳过。 组合没有数量要求元素可以重复拾取 这题的难点在于可以反复取值。因此对…

纯c实现栈和队列 数据结构大全

栈 栈是一种后进先出的数据结构&#xff0c;可以用数组来模拟实现&#xff0c;掌握必要的数据结构是非常的有必要的 一样是先打出头文件 #pragma once#include <stdio.h> #include <stdlib.h> #include <string.h> #include <stdbool.h> #include &…

Spring Cloud 系列:Seata 中TCC模式具体实现

概述 https://seata.io/zh-cn/docs/dev/mode/tcc-mode https://seata.io/zh-cn/docs/user/mode/tcc TCC模式与AT模式非常相似&#xff0c;每阶段都是独立事务&#xff0c;不同的是TCC通过人工编码来实现数据恢复。需要实现三个方法&#xff1a; Try&#xff1a;资源的检测和…

第4章-IP基本原理

目录 1. IP协议概述 1.1. 定义 1.2. 功能 1.3. IP网络的结构 1.4. IP头格式 2. IP地址和地址映射 3. IP包转发 4. 其他相关协议介绍 1. IP协议概述 1.1. 定义 IP协议&#xff1a;IP协议是网际互连协议&#xff1b; 工作层次&#xff1a;网络层&#xff1b; 封装&#…

dubbo:服务暴露

节点角色说明&#xff1a; Provider:暴露服务的服务提供方。 Consumer::调用远程服务的服务消费方。 Registry:服务注册与发现的注册中心。 Monitor:统计服务的调用次调和调用时间的监控中心。 Container:服务运行容器。 调用关系说明&#xff1a; 0.服务容器负责启动&#xff…

js之执行上下文和作用域

定义 变量和函数的上下文决定了它们可以访问那些数据&#xff0c;以及它们的行为 每个上下文都有一个关联的变量对象&#xff0c;而这个上下文中定义的所有变量和函数都在存在于这个变量对象之上 上下文再其所以代码都执行完毕之后会被销毁&#xff0c;包括定义在它上面的所有…

研究生开题报告撰写:文言一心VSChatgpt3.5

文言一心 问&#xff1a;我是一名研二学生&#xff0c;请帮我生成一份研究生毕设开题答辩ppt框架。 答&#xff1a;好的&#xff0c;以下是一份研究生毕设开题答辩PPT的框架&#xff0c;供您参考&#xff1a; 幻灯片1&#xff1a;封面页 标题&#xff1a;研究生毕设开题答辩…

大数据学习之Flink、10分钟了解Flink的核心组件以及它们的工作原理

第一章、Flink的容错机制 第二章、Flink核心组件和工作原理 第三章、Flink的恢复策略 第四章、Flink容错机制的注意事项 第五章、Flink的容错机制与其他框架的容错机制相比较 目录 第二章、Flink核心组件和工作原理 Ⅰ、核心组件 1. Checkpoint组件&#xff1a; 2. Sav…

HTML+JavaScript-03

JavaScript函数 定义函数的格式 JavaScript 函数是通过 function 关键词定义的。 function sum(a, b){//函数体return a b;//返回值为a、b的和 }函数的调用 调用函数时直接书写函数名即可 function show(){alert("函数show被调用"); } show();函数的相互调用 …

使用Docker部署Apache Superset结合内网穿透实现远程访问本地服务

文章目录 前言1. 使用Docker部署Apache Superset1.1 第一步安装docker 、docker compose1.2 克隆superset代码到本地并使用docker compose启动 2. 安装cpolar内网穿透&#xff0c;实现公网访问3. 设置固定连接公网地址 前言 Superset是一款由中国知名科技公司开源的“现代化的…