Python 保存需要登录的网页的PDF

Python 保存需要登录的网页的PDF,python,pdf,python-requests,browser-automation,pdfkit,Python,Pdf,Python Requests,Browser Automation,Pdfkit,我试图通过设置cookies并使用请求导航到页面,将受登录保护的网页保存为PDF的过程自动化。有没有更好的方法来解决这个问题/我做错了什么?门户发送不同名称的登录名和密码,还发送隐藏值,这些值可以在每次请求中更改。它发送到不同于login.php的url,并且它可以检查头以阻止bot/脚本 它可以更容易地控制浏览器,您可以拍照或获取HTML生成PDF import requests import pdfkit # start a session s = requests.Session() d

我试图通过设置cookies并使用请求导航到页面,将受登录保护的网页保存为PDF的过程自动化。有没有更好的方法来解决这个问题/我做错了什么?

门户发送不同名称的登录名和密码,还发送隐藏值,这些值可以在每次请求中更改。它发送到不同于
login.php
的url,并且它可以检查头以阻止bot/脚本

它可以更容易地控制浏览器,您可以拍照或获取HTML生成PDF

import requests
import pdfkit

# start a session
s = requests.Session()
data = {'username': 'name', 'password': 'pass'}

# POST request with cookies
s.post('https://www.facebook.com/login.php', data= data)
url = 'https://www.facebook.com'

# navigate to page with cookies set
options = {'cookie': s.cookies.items(), 'javascript-delay': 1000}
pdfkit.from_url(url, 'file.pdf', options= options)
也许使用驱动程序“PhantomJS”或模块
PIL/pillow
可以获得完整的页面截图。

请参见

使用wkhtmltopdf,您可以从命令行执行以下操作:

import selenium.webdriver
import pdfkit
#import time

driver = selenium.webdriver.Chrome()
#driver = selenium.webdriver.Firefox()

driver.get('https://www.facebook.com/login.php')
#time.sleep(1)

driver.find_element_by_id('email').send_keys('your_login')
driver.find_element_by_id('pass').send_keys('your_password')
driver.find_element_by_id('loginbutton').click()
#time.sleep(2)

driver.save_screenshot('output.png') # only visible part

#print(driver.page_source)

pdfkit.from_string(driver.page_source, 'file.pdf')

错误是什么?@AlvaroJoao对于Facebook的例子,它创建了一个登录屏幕的pdf。它应该显示我的新闻提要,但是,在cookies设置之后,对吗?你收到错误消息了吗?始终将完整的错误消息(回溯)放在问题中(作为文本,而不是屏幕截图)。还有其他有用的信息。门户不仅可以发送
用户名
密码
,还可以发送隐藏的值,然后可以使用不同的名称
用户名
密码
。它可以将其发送到不同的url,然后
login.php
。它还可以检查诸如
用户代理
(等)之类的头文件,以阻止所有可能试图入侵门户并窃取数据的机器人程序/脚本。您可以在Chrome/Firefox中使用
DevTool
查看从浏览器发送到服务器的请求,并查看所有cookie、表单字段、标题等。有时,使用它可以更轻松地控制web浏览器和登录页面。我记得Selenium也可以创建屏幕截图。
wkhtmltopdf --cookie-jar cookies.txt  https://example.com/loginform.html --post 'user_id' 'my_id' --post 'user_pass' 'my_pass --post 'submit_btn' 'submit' throw_away.pdf 
wkhtmltopdf --cookie-jar cookies.txt  https://example.com/securepage.html keep_this_one.pdf