簡體   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