【发布时间】:2018-12-14 21:12:00
【问题描述】:
我正在寻求有关从安全网站下载文件的帮助。我在这方面的知识不多,所以我不确定我能提供什么会有帮助。如果你能告诉我从网站上抓取什么,我会的。
这里是基础知识。我必须使用IE。我正在使用 vba 发送自动代码。我可以登录网站,导航到他们的报告页面,运行我的报告。它返回一个带有超链接、名称等的表格。我只是在尝试下载一个示例的阶段,所以我知道下载是有效的。我想我可以毫无问题地循环表格并将超链接提供给循环。
当我为下载代码提供第一个超链接时,我得到了我的 pdf,但打开它时只有一条消息,说您必须登录才能查看。嗯,我已经登录了。那个用过
Call URLDownloadToFile(0, "https://atlasbridge.com/reports/atlasreportdownload.ashx?N=49837661&RT=PREVMAIL", "C:\Users\JCarney\Desktop\DownloadedMail\atlasreportdownload.ashx.pdf", 0, 0)
然后我尝试了:
Dim theURL As String
theURL = "https://atlasbridge.com/reports/atlasreportdownload.ashx? N=49837661&RT=PREVMAIL"
Debug.Print theURL
Dim WinHttpReq As Object
Set WinHttpReq = CreateObject("Microsoft.XMLHTTP")
WinHttpReq.Open "GET", theURL, False, UName, Pword
WinHttpReq.Send
theURL = WinHttpReq.responseBody
If WinHttpReq.Status = 200 Then
Debug.Print theURL
Set oStream = CreateObject("ADODB.Stream")
oStream.Open
oStream.Type = 1
oStream.Write WinHttpReq.responseBody oStream.SaveToFile "C:\Users\JCarney\Desktop\DownloadedMail\atlasreportdownload.ashx.pdf", 2 ' 1 = no overwrite, 2 = overwrite
oStream.Close
End If
结果是一样的,一个 pdf 下载但说我没有登录。UName,Pword 是字符串变量,用于在 sub 中查找用户名和密码。他们正在查找正确的信息。我不知道从这里去哪里。我可以让vba“单击”超链接并下载并命名文件吗?还是我继续尝试从 WinHttpReq 下载。
表格的 html 如下所示:
'<table align="center" id="ctl00_cphMain_dgMailings" style="border-collapse:collapse;" border="1" rules="all" cellspacing="0">
'<td>Policy</td><td>Insured</td><td>Type</td><td>Mailed</td>
' <tbody><tr class="blacktextbold">
' <td> </td><td>Policy</td><td>Insured</td><td>Type</td><td>Mailed</td>
' </tr><tr class="blacktext">
' </tr><tr class="blacktext" style="background-color:#D9D9D9;">
' <td><a href="../reports/atlasreportdownload.ashx?N=49837661&RT=PREVMAIL" target="_blank">View</a></td><td>1501-1603-1276</td><td>SUSAN</td><td>Amended Dec Page</td><td>12/08/2018</td>
' </tr><tr class="blacktext">href="javascript:__doPostBack('ctl00$cphMain$dgMailings$ctl19$ctl01','')">></a></td>
' </tr>
'</tbody></table>
格式正确的超链接将是什么,就像您手动执行此操作一样: "https://atlasbridge.com/reports/atlasreportdownload.ashx?N=49837661&RT=PREVMAIL" 该表向我们展示了截断的路径。
提前谢谢你。
快速编辑。当我检查元素时,表中的“视图”超链接。我明白了:
<a href="../reports/atlasreportdownload.ashx?N=49988945&RT=PREVMAIL" target="_blank">View</a>
如果有帮助的话。对我没有任何启发,但也许有帮助。 如果我使用 SetCredentials "username","password",, HTTPREQUEST_SETCREDENTIALS_FOR_SERVER 作为网站的登录屏幕,这是响应文本 login screen webpage
这是我直接点击 pdf 超链接时的响应文本: pdf hyperlink
【问题讨论】:
-
如果您尝试从浏览器手动下载 PDF 报告文件会怎样?是否显示相同的错误消息或成功打开 PDF 文件?该站点可能应用了一些逻辑,并且只有在用户登录时才会在浏览器中打开文件。
-
手动下载是我们现在的做法。但我也测试了代码的登录方面是否可以运行并获取文件。我们只需在另一个选项卡中单击查看超链接和 pdf 显示就可以了,或者您可以右键单击它并直接保存。所以它肯定会看到我以手动方式登录。这一切都很好。所以我想我要么需要自动化“点击 - 保存”步骤,要么仍然进行静默下载,但每次都将凭据传递给它,我不知道该怎么做。两种方法我都可以。
-
我只是对这个理论进行了测试。我登录了。通过单击查看打开了一个文档。这当然奏效了。我复制了超链接并将其粘贴到另一个选项卡中,而我已登录并且它确实成功拉出文档,所以它不仅仅是单击拉出它的文档。第二次测试,在其中打开一个新选项卡自己的浏览器窗口并粘贴超链接,这也有效。因此,通过更多手动方法,IE 似乎仍然向文档服务器提供我登录的信息。
-
我添加到 png 文件中,显示在登录页面和他们网站的 pdf 超链接上使用 setcredentials 时得到的响应文本。
标签: ms-access internet-explorer vba