【问题标题】:How to convert webpage to pdf in python like the save as pdf option in print如何在python中将网页转换为pdf,例如打印中的另存为pdf选项
【发布时间】:2018-03-30 10:15:19
【问题描述】:

我有一个需要登录(身份验证)的网站,该网站有一个消息页面,我想将所有 cmets 转换为 pdf。最初我只是点击每条评论并在 Firefox 浏览器中选择打印,然后将评论流保存为 pdf。问题是有这么多,所以我决定编写一个 python 脚本,但我遇到了问题。这是我的代码:

import mechanize
import pdfkit
import os

br = mechanize.Browser()
br.set_handle_robots(False)
br.addheaders = [("User-agent","Firefox")]
sign_in = br.open("www.mysite.com")

br.select_form(nr = 0)
br["username"] = "username"
br["password"] = "password"
logged_in = br.submit()

br.open("comments_page")
all_comment_links = []

# Iterate the links
for link in br.links():
  if "comment" in link.url:
    all_comment_links.append(link)

for l in all_comment_links:
  ret = br.open("comments_page").read()
  pdfkit.from_url(l.url, l.text + ".pdf")
  # pdfkit.from_string(ret, l.text + ".pdf")

  file = open(l.text + ".html", "w")
  file.write(ret)
  file.close()

# try from file
#for f in glob.glob("*.html"):
#  pdfkit.from_file(f, f.replace(".html", ".pdf"))

我正在尝试使用 pdfkit 库将每个评论页面转换为 pdf,但没有成功。我尝试使用 url (pdfkit.from_url)、字符串 (pdfkit.from_string),并将 html 保存到文件 (pdfkit.from_file),但无法弄清楚为什么这不起作用。据我所知,机械化的东西是有效的,因为我的 html 文件包含我想要的所有 cmet 以及正确的内容。我环顾四周寻找不同的方法,但这就是我想要的。

脚本不会抛出任何错误,它只是挂在第一个 pdf 上,就像它无法访问页面/内容一样。我让它运行了一段时间,但只创建了第一个 pdf 文件,但是当我尝试打开它时,它说它已损坏。我使用 pdfkit 错误还是应该使用其他东西将这些页面转换为 pdf?谢谢,任何帮助表示赞赏。在 mac os x 上运行。

【问题讨论】:

  • 考虑切换到 Selenium。这些天我真的很喜欢 nightmarejs。
  • @pguardiario 最终使用 selenium,好多了。

标签: python macos python-2.7 mechanize pdfkit


【解决方案1】:

我最初的猜测是 pdfkit 没有收到任何来自 mechanize 的会话信息,因此它会尝试在未登录的情况下使用身份验证后的页面。

你可能应该先用 mechanize 下载 html,然后在本地转换它。

但是,由于您说您也没有从文件中获取结果,您应该尝试交互式 python shell 并尝试手动将 pdfkit 应用于本地文件,看看您得到了什么错误。

其他情况可能是 pdfkit 输入或输出文件不在您可能合理期望的目录中,因此应尝试使用绝对路径作为参数。

【讨论】:

    猜你喜欢
    • 2015-11-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-23
    • 2014-12-05
    • 1970-01-01
    • 2014-06-15
    相关资源
    最近更新 更多