使用python将网页下载为pdf

这篇具有很好参考价值的文章主要介绍了使用python将网页下载为pdf。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

背景:即使用 python 实现网页的打印,将网页下载为pdf

要求

安装ChromeDriver,并配置环境遍历,版本需要与chrome版本一致

下载地址:ChromeDriver - WebDriver for Chrome - Downloads (google.com)https://sites.google.com/chromium.org/driver/downloads代码:

import os,json,time
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.action_chains import ActionChains


def print_url_to_pdf(url, save_root, 
                     file_name='demo.pdf', 
                     scroll_distance=500, 
                     scroll_interval=0.5, 
                     headless=False):
    """
    save_root: pdf 保存目录,建议绝对路径
    file_name:pdf保存名称
    scroll_distance:每次向下滑动距离,模拟浏览页面,获得全部页面元素
    scroll_interval:滑动一次后,间隔时间
    headless:是否可见窗口,True, 不可见;False,可见,调试时可设为可见
    """
    chrome_options = webdriver.ChromeOptions()

    settings = {
        "recentDestinations": [{
            "id": "Save as PDF",
            "origin": "local",
            "account": ""
        }],
        "selectedDestinationId": "Save as PDF",
        "version": 2,
        "isHeaderFooterEnabled": False,

        # "customMargins": {},
        # "marginsType": 2,
        # "scaling": 100,
        # "scalingType": 3,
        # "scalingTypePdf": 3,
        "isLandscapeEnabled":False,#landscape横向,portrait 纵向,若不设置该参数,默认纵向
        "isCssBackgroundEnabled": True,
        "mediaSize": {
            "height_microns": 297000,
            "name": "ISO_A4",
            "width_microns": 210000,
            "custom_display_name": "A4 210 x 297 mm"
        },
    }


    chrome_options.add_argument('--enable-print-browser')

    if headless:
        chrome_options.add_argument('--headless') #headless模式下,浏览器窗口不可见,可提高效率

    prefs = {
        'printing.print_preview_sticky_settings.appState': json.dumps(settings),
        'savefile.default_directory': save_root #此处填写你希望文件保存的路径
    }
    chrome_options.add_argument('--kiosk-printing') #静默打印,无需用户点击打印页面的确定按钮
    chrome_options.add_experimental_option('prefs', prefs)


    driver = webdriver.Chrome(options=chrome_options)

    print('-'*100)
    print(f'now: url: {url}')
    driver.get(url)

    # 获取当前所有窗口的句柄
    handles = driver.window_handles
    # 切换到最后一个窗口(假设最后一个窗口是要操作的窗口)
    driver.switch_to.window(handles[-1])


    # 获取当前视口的高度
    viewport_height = driver.execute_script("return window.innerHeight;")
    # 获取滚动条的位置
    current_scroll_position = driver.execute_script("return window.scrollY;")

    # 定义滚动的距离和间隔时间
    # scroll_distance = 200 # 每次滚动的距离
    # scroll_interval = 0.5 # 每次滚动的间隔时间(秒)

    # 计算需要滚动的次数
    num_scrolls = int((driver.execute_script("return document.body.scrollHeight;") - current_scroll_position) / scroll_distance)

    print('scroll pages...')
    # 循环滚动页面
    for _ in range(num_scrolls):
        driver.execute_script(f"window.scrollBy(0, {scroll_distance});")
        time.sleep(scroll_interval)

    # 执行 JavaScript 代码,将页面滚动到底部
    driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
    # 等待页面加载完成
    # 添加适当的等待时间或条件,确保页面已完全加载
    time.sleep(5)

    driver.maximize_window()
    
    #利用js修改网页的title,该title最终就是PDF文件名,
    # 利用js的window.print可以快速调出浏览器打印窗口,避免使用热键ctrl+P
    path = os.path.join(save_root, file_name)
    print(f'save pdf: {path}')
    driver.execute_script(f'document.title="{file_name}";window.print();') 
    driver.close()


def download_urls(url_list, name_list, save_root):
    for url, name in zip(url_list, name_list):
        print_url_to_pdf(url, save_root, name)
        time.sleep(5)



url_list =[
    'https://baike.baidu.com/item/%E5%8C%97%E4%BA%AC%E5%B8%82/126069?fromModule=lemma_search-box&fromtitle=%E5%8C%97%E4%BA%AC&fromid=128981',
    'https://baike.baidu.com/item/%E5%A4%A9%E6%B4%A5%E5%B8%82/213824?fromModule=lemma_search-box&fromtitle=%E5%A4%A9%E6%B4%A5&fromid=132308'
]
name_list = [
    'beijing.pdf', 'tianjin.pdf'
]
save_root = 'C:\\data'
download_urls(url_list, name_list, save_root)

headless True时,即不显示窗口,不会下载为pdf(代码能正常运行),这个问题暂时未解决,稍后解决。文章来源地址https://www.toymoban.com/news/detail-729557.html

到了这里,关于使用python将网页下载为pdf的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • python网页点击下载按钮,python自动下载视频

    大家好,本文将围绕python登录网站自动下载文件展开说明,python自动下载网页中的文件是一个很多人都想弄明白的事情,想搞清楚python网页点击下载按钮需要先了解以下几个事情。 大家好,小编为大家解答python自动下载文件到指定文件夹的问题。很多人还不知道python登录网站

    2024年03月09日
    浏览(80)
  • 用Python下载网页视频

    你可以使用 Python 中的 requests 库来下载网页视频。 首先,你需要安装 requests 库。你可以在命令行中输入以下命令来安装它: 然后,你可以使用 requests.get() 函数来下载网页视频。例如: 这样,你就可以使用 Python 下载网页视频了。 注意:请确保你有权限下载该视频,并遵守

    2024年02月12日
    浏览(62)
  • 微信小程序使用webview打开pdf文档及显示网页内容

    一、微信小程序根据接口返回的pdf链接,在小程序内部浏览pdf内容 需要用到微信小程序的两个api 下载资源到本地 wx.downloadFile wx.openDocument 前一个api下载资源到本地,后一个api打开pdf文档 二、根据网页链接,把网页内容在微信小程序内部显示 需要用到微信小程序的一个标签

    2024年02月09日
    浏览(58)
  • python从入门到精通pdf下载,python3.8从入门到精通pdf

    本篇文章给大家谈谈python3.8从入门到精通pdf百度云下载,以及python从入门到精通电子书下载,希望对各位有所帮助,不要忘了收藏本站喔。 从0开始学Python,就问你一句:慌不慌? 说句实在的,慌,可能是因为你自己没有完整的规划,其实就是不知道从何下手,七七八八乱学

    2024年02月02日
    浏览(65)
  • Python 爬虫网页图片下载到本地

    您可以使用Python的requests库来获取网页的源码,使用BeautifulSoup库来解析HTML,并使用urllib库来下载图片到本地。下面是一个示例代码: 请注意,上述代码中的URL和文件名是示例,您需要根据实际情况进行替换。另外,这段代码只能下载图片类型为JPEG的文件,如果想要下载其他

    2024年02月11日
    浏览(56)
  • 【python学习笔记】:实现网页视频自动下载并保存

    如何使用python爬虫实现网页视频自动下载并保存: 使用python爬取页面,然后自动下载视频,但是这样会有一个问题,我并不是需要所有视频,有些是垃圾视频不需要下载,python似乎还没法做到识别我对哪些视频是有价值的,所以这一步人工绕不开,我选择直接把目标视频的详

    2024年02月11日
    浏览(49)
  • python之教你如何下载网页视频(亲测可用)

    以好看网为例 随便选择一个视频点击即可,按下F12查看 选择Network-Fetch/XHR,在左侧栏Name这一列可以看多很多请求,由于好看网中的视频是音视频分开的,所以你要分别下载音频文件和视频文件,最后可以利用ffmpeg将其合成到一个完整的视频当中。 源码如下:

    2024年02月09日
    浏览(68)
  • Python爬虫采集下载中国知网《出版来源导航》PDF文档

    时隔一年,很久没更新博客了。今天给大家带来一个python3采集中国知网 :出版来源导航 这个是网址是中国知网的,以下代码仅限于此URL(出版来源导航)采集,知网的其他网页路径采集不一定行,大家可以试试。 在发布代码前,大家先看下下载文件数据。 以上的数据基本

    2024年01月23日
    浏览(59)
  • 微信公众号 - 实现 H5 网页在微信内置浏览器中下载文件,可预览和下载 office 文件(doc / xls / ppt / pdf 等)适用于任何前端技术栈网站,兼容安卓和苹果系统!

    网上的教程都是让你写页面 “引导” 右上角三个点里,让用户自己去浏览器打开,其实这样用户体验并不好。 本文实现了 最新微信公众号 H5 网页(微信内置浏览器中),预览下载 office 文件,安卓和苹果全都支持! 您可以直接复制代码,移植到自己项目中去, 任何前端项

    2024年01月21日
    浏览(73)
  • Python Selenium如何下载网页中的图片到本地?(Base64编码的图片下载)

    前言:                 在网页上,图片有时会以Base64编码的形式嵌入在HTML中,而不是作为单独的文件提供。这种方式的优点是可以减少HTTP请求的数量,因为图片数据直接包含在HTML中,不需要额外的请求来获取图片文件。这对于小图片或图标特别有用,因为这些图片的文

    2024年04月17日
    浏览(51)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包