繁体   English   中英

从python网站下载Excel报告会保存一个空白文件

[英]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&amp;object=Organization&amp;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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM