【发布时间】:2018-05-27 09:44:42
【问题描述】:
我要做什么-
我正在尝试自动化-
- 登录员工自助服务门户
- 单击几个链接可进入以嵌入式 PDF 显示工资单的页面
- 下载 PDF
我已经能够使用以下代码完成第 1 步和第 2 步:
from selenium import webdriver
browser = webdriver.Chrome()
#open the site and enter userid and password
browser.get('http://eportal.erp.bsnl.co.in/irj/portal')
userName = browser.find_element_by_css_selector ('#logonuidfield')
userName.send_keys('12345678')
password = browser.find_element_by_css_selector ('#logonpassfield')
password.send_keys('12345678')
password.submit()
#clicking on couple of links to get to the salary statement page
employeess = browser.find_element_by_css_selector ('#navNodeAnchor_1_1')
employeess.click()
browser.switch_to.frame('pb_100693274')
browser.switch_to.frame('isolatedWorkArea')
payslip = browser.find_element_by_xpath ('//*[@id="aaabGFON.AreaGroupViewStatic.QuickLink12"]/span')
payslip.click()
#get the url for embedded PDF
browser.switch_to.frame('pb_100693274')
browser.switch_to.frame('isolatedWorkArea')
browser.switch_to.frame('aaabLDOL.VcRfwIFrameView.RfwIframe')
url = browser.find_element_by_xpath('//*[@id="plugin"]').get_attribute('src')
这是动态生成的,所以我尝试使用 wget 下载 PDF
import wget
wget.download(url)
结果是—— '未知.pdf'
但是当我检查这个文件时,它只有 1Kb,打开它会给出“文件可能已损坏的消息”。该文件的大小应为 80Kb 左右。
我尝试过的- 我试图在 New Tab 中打开上面的长网址,它向我显示了 PDF。但是,当我尝试在 新窗口 中打开相同的 url 时,我收到“Session Expired”错误,我认为这是我无法下载完整文件的原因。
我怀疑这意味着服务器在发送文件之前会检查会话/cookie。
有没有办法从上面给定的 url 下载 PDF 文件,从 Chromedriver 启动的用于登录或传递会话/cookie 以及用于下载文件的 url 的同一浏览器窗口?
【问题讨论】:
-
使用 selenium 获取 cookie 并将它们与相同的用户代理一起添加到您的请求中。您还可以在页面中注入脚本以通过
XMLHttpRequest下载文件。另一种方法是使用首选项禁用 pdf 查看器,单击链接并等待文件下载。 -
Florent B. 能否提供参考或代码 sn-ps。
标签: python-3.x selenium session cookies download