Python 手把手教学:如何长截屏?
导言
长截屏(full-page screenshot)是一种抓取整个网页、而不仅仅是可见区域的截屏。有时,你需要截取完整网页来记录信息、生成报告、分享内容或仅仅是作为计算机文件的样本。而 Python 提供了一种可靠的方法来实现这一操作,那就是使用 Selenium 和 Headless Chrome。
在这篇文章中,我们将带你走过一步一步地实现 Python 爬虫长截屏的过程。我们会设计一个 Python 程序,可以抓取指定的网页并生成长截屏。让我们开始了解长截屏的重要性及步骤。
长截屏的重要性
长截屏有一些实际用途,如检查整个页面布局、保存页面内容以供将来参考、分享页面信息等等。
-
保存草稿
大多数编辑器都具有保存草稿文件的功能,但如果你正在编写一个在线应用程序,或者你想保存一个转换为 .pdf 格式的网页,那么长截屏就很方便了。 -
节省时间和精力
大多数浏览器并不支持长截屏功能,所以你需要手动移动滚动条并捕捉多个屏幕镜头以获得整个页面;而使用 Python 自动执行此过程,就可以轻松节省时间和精力。
步骤
我们将介绍一步一步如何通过 Selenium 和 Headless Chrome 实现长截屏。下面是包含该代码的 Python 程序。
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.action_chains import ActionChainsclass Screenshot:# The constructor method of the Screenshot class.def __init__(self, url, save_filename):self.url = url# Define the Chrome options.chrome_options = Options()chrome_options.headless = Truechrome_options.add_argument('--disable-extensions')chrome_options.add_argument('--disable-gpu')chrome_options.add_argument('--no-sandbox')# Set the executable path of the Chrome driver.self.driver = webdriver.Chrome('/usr/local/bin/chromedriver', options=chrome_options)self.driver.maximize_window()self.save_filename = save_filename# Take a full-page screenshot.def fullpage_screenshot(self):# Navigate to the target website.self.driver.get(self.url)try:# Scroll to the end of the webpage.last_height = self.driver.execute_script("return document.body.scrollHeight")while True:self.driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")self.driver.implicitly_wait(5)new_height = self.driver.execute_script("return document.body.scrollHeight")if new_height == last_height:breaklast_height = new_heightexcept Exception as e:print(e)finally:# Take a screenshot of the webpage.self.driver.save_screenshot(self.save_filename)# Close the Chrome driver.def close(self):self.driver.quit()def main():url = 'https://kkdai.cn/'save_filename = 'kkdai.png'screenshot = Screenshot(url, save_filename)screenshot.fullpage_screenshot()screenshot.close()if __name__ == '__main__':main()
Step 1: 导入模块
首先,我们需要导入以下模块:
from selenium import webdriver # 从 Selenium 模块中导入 webdriver
from selenium.webdriver.chrome.options import Options # 从 Selenium 中导入 ChromeOptions
from selenium.webdriver.common.by import By # 用于通过名称、类名、id 和标签名称等查找一个元素
from selenium.webdriver.common.keys import Keys # 从键盘上发送命令至浏览器
from selenium.webdriver.common.action_chains import ActionChains # 一系列操作
Step 2: 安装和配置谷歌浏览器驱动
在这里,我们需要在你的计算机上安装并配置 Chrome 浏览器驱动。在 Ubuntu 系统上,你可以使用以下命令:
sudo apt-get update
sudo apt-get install chromium-chromedriver
Step 3: 创建 Screenshot 类
我们需要创建一个 Screenshot
类来处理长截屏操作。项目中最重要的方法是 fullpage_screenshot
函数,它将负责导航到指定的网址、滚动浏览器以抓取整个页面、并最终权限截图。
class Screenshot:
# The constructor method of the Screenshot class.
def init(self, url, save_filename):
self.url = url
# Define the Chrome options.
chrome_options = Options()
chrome_options.headless = True
chrome_options.add_argument(‘–disable-extensions’)
chrome_options.add_argument(‘–disable-gpu’)
chrome_options.add_argument(‘–no-sandbox’)
# Set the executable path of the Chrome driver.
self.driver = webdriver.Chrome(‘/usr/local/bin/chromedriver’, options=chrome_options)
self.driver.maximize_window()
self.save_filename = save_filename
Step 4: 实现 long_screenshot 函数
下面,我们定义了一个方法,fullpage_screenshot
:
# Take a full-page screenshot.def fullpage_screenshot(self):# Navigate to the target website.self.driver.get(self.url)try:# Scroll to the end of the webpage.last_height = self.driver.execute_script("return document.body.scrollHeight")while True:self.driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")self.driver.implicitly_wait(5)new_height = self.driver.execute_script("return document.body.scrollHeight")if new_height == last_height:breaklast_height = new_heightexcept Exception as e:print(e)finally:# Take a screenshot of the webpage.self.driver.save_screenshot(self.save_filename)
Step 5: 完善 main 整体代码
在最后一步中,我们主要是通过定义好的 Screenshot 类来实现长截屏:
def main():
url = ‘https://kkdai.cn/’
save_filename = ‘kkdai.png’
screenshot = Screenshot(url, save_filename)
screenshot.fullpage_screenshot()
screenshot.close()
注意一定要调用 close 方法,以确保浏览器驱动被关闭和释放。
结论
在这篇文章中,我们介绍了如何使用 Python、Selenium 和 Headless Chrome 实现长截屏。这会给你省去很多时间和精力。如果你正在为网站的布局设计和网络分析而努力工作,那么这个工具肯定会让你的工作更高效。抓取整页截图听起来简单,但当你想要在大量的网页中进行准确的操作,这一工具则变得更为重要。相信你现在可以轻松地实现长截屏,加速自己的工作效率。
最后的最后
本文由chatgpt生成,文章没有在chatgpt
生成的基础上进行任何的修改。以上只是chatgpt
能力的冰山一角。作为通用的Aigc
大模型,只是展现它原本的实力。
对于颠覆工作方式的ChatGPT
,应该选择拥抱而不是抗拒,未来属于“会用”AI的人。
🧡AI职场汇报智能办公文案写作效率提升教程 🧡 专注于AI+职场+办公
方向。
下图是课程的整体大纲
下图是AI职场汇报智能办公文案写作效率提升教程
中用到的ai工具
🚀 优质教程分享 🚀
- 🎄可以学习更多的关于人工只能/Python的相关内容哦!直接点击下面颜色字体就可以跳转啦!
学习路线指引(点击解锁) | 知识定位 | 人群定位 |
---|---|---|
🧡 AI职场汇报智能办公文案写作效率提升教程 🧡 | 进阶级 | 本课程是AI+职场+办公的完美结合,通过ChatGPT文本创作,一键生成办公文案,结合AI智能写作,轻松搞定多场景文案写作。智能美化PPT,用AI为职场汇报加速。AI神器联动,十倍提升视频创作效率 |
💛Python量化交易实战 💛 | 入门级 | 手把手带你打造一个易扩展、更安全、效率更高的量化交易系统 |
🧡 Python实战微信订餐小程序 🧡 | 进阶级 | 本课程是python flask+微信小程序的完美结合,从项目搭建到腾讯云部署上线,打造一个全栈订餐系统。 |