[英]Downloading an excel report from website in python saves a blank file
我每周大约有8份报告需要从系统中提取,这需要花费大量时间,因此我正在努力实现此过程的自动化。 我正在使用请求登录到网站并下载文件。 但是,当我使用python脚本下载文件时,该文件变回空白。 当我使用相同的链接从浏览器下载时,它不是空白。 下面是我的代码:
payload = {
'txtUsername': 'uid',
'txtPassword': 'pass'
}
domain = 'https://example.com/login.aspx?ReturnUrl=%2fiweb%2f'
path = 'C:\\Users\\workspace\\data-in\\'
with requests.Session() as s:
p = s.post(domain, data=payload)
r = s.get('https://example.com/forms/MSWordFromSql.aspx?ContentType=excel&object=Organization&FormKey=f326228c-3c49-4531-b80d-d59600485557')
with open(path + 'report1.xls', 'wb') as f:
f.write(r.content)
有关网址的一些知识。 当我寻找URL时,我发现它包装在一些JS中。
<a href="javascript:void(0);OpenNewWindow('../forms/MSWordFromSql.aspx?ContentType=excel&object=Organization&FormKey=f326228c-3c49-4531-b80d-d59600485557',true);" id="ListToolbarRAWEXCELExportLink" class="TopUIRawExcelExportMenuLink">Export Raw Data to Excel</a>
但是,当我查看下载文件的路径时,报告的真实位置是这样的:
https://example.com/forms/MSWordFromSql.aspx?ContentType=excel&object=Organization&FormKey=f326228c-3c49-4531-b80d-d59600485557
这是我在代码中用于下载报告的URL。 运行脚本后,将创建文件,命名文件并将其保存到正确的目录,但该文件为空。 正如我在线程顶部提到的那样,如果我只是将URL复制到浏览器中,那么它将毫无问题地下载报告。
我也在考虑使用Selenium完成此操作,但问题是在下载文件时我无法重命名文件。 我需要每个文件都有一个特定的名称,因为所有下载的报告都将在另一个自动化脚本中使用。
如@Lucas所述,您的Python代码可能发送的请求与浏览器发送的请求不同,从而收到不同的响应。
我将使用浏览器开发工具来检查浏览器发出的启动下载的请求。 使用“复制为卷曲”并尝试从命令行重现正确的行为。
然后,通过从curl调用中删除不必要的部分并将必要的标头添加到python代码中,从而减少curl
请求与python代码所产生的请求之间的差异。 https://curl.trillworks.com/可以为后者提供帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.