Python使用Selenium将网页保存为图片或PDF

Written by

in

文章目录
  • 之前写过一篇将网页保存为图片的文章 C#利用WebBrowser将网页保存为图片 这里有个弊端,C# WebBrowser使用的是IE内核,目前很多网站都不支持IE了,所以需要找新的方案替代。 
  • 在Python中,一个常见的选择是使用Selenium配合Pillow将网页保存为图片。
  • 目录
    • 一、背景介绍
    • 二、Python实现
      • 第1步:安装Python环境。
      • 第2步:安装Selenium库。
      • 第3步:下载Chrome浏览器、ChromeDriver
      • 第4步:编写代码将网页保存为图片
      • 第5步:将网页保存为PDF

    之前写过一篇将网页保存为图片的文章

    C#利用WebBrowser将网页保存为图片

    这里有个弊端,C# WebBrowser使用的是IE内核,目前很多网站都不支持IE了,所以需要找新的方案替代。 

    在Python中,一个常见的选择是使用Selenium配合Pillow将网页保存为图片。

    如未安装,请参考从安装到应用全面掌握Python与OpenCV的配置与高级功能(最新推荐)

    如果你还没有安装它们,可以使用pip来安装:

    打开windows命令行工具,输入以下命令:

    pip install selenium pillow

    使用Selenium需要一个WebDriver,比如ChromeDriver。

    注意:下载的ChromeDriver需与使用的Chrome浏览器版本保持一致。

    下载完后,报存到电脑任一目录即可,如:

    ChromeDriver官方下载地址可能打不开,可以使用华为提供的镜像。

    Index of chromedriver-local 各个版本都有,找到与自己Chrome的版本一致,下载即可。

    from selenium import webdriver
    from selenium.webdriver.chrome.service import Service
    from selenium.webdriver.common.by import By
    from selenium.webdriver.chrome.options import Options
    from PIL import Image
    import io
    
    # 设置Chrome选项
    chrome_options = Options()
    chrome_options.add_argument("--headless")  # 无头模式,不打开浏览器窗口
    chrome_options.add_argument("--disable-gpu")
    
    # 指定ChromeDriver的路径
    service = Service(executable_path='C:\chromedriver-win64\chromedriver.exe')
    
    # 创建WebDriver对象
    driver = webdriver.Chrome(service=service, options=chrome_options)
    
    # 访问目标网页
    driver.get('https://blog.csdn.net/a497785609')
    
    # 获取页面的实际高度和宽度
    width = driver.execute_script("return document.documentElement.scrollWidth")
    height = driver.execute_script("return document.documentElement.scrollHeight")
    
    # 设置窗口大小
    driver.set_window_size(width, height)
    
    # 截图并保存
    driver.save_screenshot('C:\chromedriver-win64\screenshot.png')
    
    # 使用Pillow处理图像(可选)
    image = Image.open(io.BytesIO(driver.get_screenshot_as_png()))
    image.show()
    
    # 关闭浏览器
    driver.quit()

    至此,使用Python+Chrome即可将网页保存为图片了。

    使用ChromeDriver+DevTools,可以将网页保存为PDF。

    from selenium import webdriver
    from selenium.webdriver.chrome.service import Service
    from selenium.webdriver.common.by import By
    from selenium.webdriver.chrome.options import Options
    from PIL import Image
    import io
    import base64
    
    # 设置Chrome选项
    chrome_options = Options()
    chrome_options.add_argument("--headless")  # 无头模式,不打开浏览器窗口
    chrome_options.add_argument("--disable-gpu")
    
    # ChromeDriver路径
    ChromeDriver = 'C:\chromedriver-win64\chromedriver.exe'
    
    # 访问目标网页
    url = 'https://blog.csdn.net/a497785609'
    
    # 保存PDF文件的路径
    file_name = "C:\test.pdf"
    
    # 指定ChromeDriver的路径
    service = Service(executable_path=ChromeDriver)
    
    # 创建WebDriver对象
    driver = webdriver.Chrome(service=service, options=chrome_options)
    
    # 访问目标网页
    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)
    
    # 【打印为PDF】
    # 调用 Chrome DevTools 的 printToPDF 方法,打印参数参考:https://chromedevtools.github.io/devtools-protocol/tot/Page/#method-printToPDF
    pdf_data = driver.execute_cdp_cmd("Page.printToPDF", {"landscape": False,
                                                          "displayHeaderFooter": False,
                                                          "printBackground": False,
                                                          "scale": 1.0,                # 必须是 float
                                                          "paperWidth": 8.5,           # A4纸宽度(英寸)
                                                          "paperHeight": 11.0,         # A4纸高度(英寸)
                                                          "marginTop": 0.5,
                                                          "marginBottom": 0.5,
                                                          "marginLeft": 0.5,
                                                          "marginRight": 0.5})
    # 解码并写入 PDF 文件
    with open(file_name, "wb") as f:
        f.write(base64.b64decode(pdf_data['data']))
    
    print(" 已保存到文件:"+file_name)
    
    # 关闭浏览器
    driver.quit()
    

    到此这篇关于Python使用Selenium将网页保存为图片或PDF的文章就介绍到这了,更多相关Python网页保存为图片或PDF内容请搜索风君子博客以前的文章或继续浏览下面的相关文章希望大家以后多多支持风君子博客!

    您可能感兴趣的文章:

    • Python3实现网页内容转换成PDF文档和图片
    • Python实现网页文件转PDF文件和PNG图片的示例代码
    • python实现自动网页截图并裁剪图片
    • python保存网页图片到本地的方法
    • 基于Python实现一个网页转PDF工具
    • 基于Python实现网页文章转PDF文档

    站内搜索