我的Internet Explorer对象$oIE
,如果涉及PDF文件(而不是HTML页面),则不允许我访问该网页的正文属性。如果我尝试访问该属性,我的代码会中断。我就是这样称呼的:
_IEAction($oIE, 'saveas')
但它错了:
"C:\Program Files (x86)\AutoIt3\Include\IE.au3" (1959) : ==> The requested action with this object has failed.:
$oObject.document.execCommand("SaveAs")
$oObject.document^ ERROR
我需要迭代几页PDF文件并将它们保存到磁盘。仅当页面是PDF文档时才会抛出此错误;普通的HTML页面工作正常。如何检查文档正文属性是否存在?如果它没有,则表示该页面是PDF(我需要保存)。
答案 0 :(得分:0)
因此,如果您需要进行错误处理,可以执行
_IEAction($oIE, 'saveas')
if (@error) then
;error handling here
endif
因此,如果您没有收到任何错误,您可以选择仅保存文件。
我认为您还可以查看_IEPropertyGet
的网址,看看它是否以" .pdf"
答案 1 :(得分:0)
您需要使用InetGet功能保存PDF并检查URL以查看它是否为PDF文件。
这是一个使用InetGet的简单示例。
InetGet("http://careers.stackoverflow.com/stack_overflow_careers.pdf", @ScriptDir & "\stack_overflow_careers.pdf")
以下是在网页上查找所有PDF网址并下载这些PDF文件的示例。
#include <IE.au3>
#include <Array.au3>
DownloadAllPDFs("http://careers.stackoverflow.com/resources/great-job-listing")
Func DownloadAllPDFs($URL)
Local $oIE = _IECreate($URL)
Local $oLinks = _IELinkGetCollection($oIE)
Dim $aPDFLinks[1]
For $oLink In $oLinks
If StringInStr($oLink.href, ".pdf") Then
_ArrayAdd($aPDFLinks, $oLink.href)
EndIf
Next
Local $iArraySize = UBound($aPDFLinks) - 1
ConsoleWrite("Number of PDF Files found: " & $iArraySize)
;_ArrayDisplay($aPDFLinks)
If $iArraySize > 0 Then
For $i = 1 To $iArraySize
InetGet($aPDFLinks[$i], @ScriptDir & "\" & $i & ".pdf")
Next
EndIf
EndFunc ;==>DownloadAllPDFs
以下是导航到URL并下载文件(如果是PDF)的示例。
#include <IE.au3>
NavigateAndDownload()
Func NavigateAndDownload()
Local $oIE = _IECreate()
_IENavigate($oIE, "http://careers.stackoverflow.com/stack_overflow_careers.pdf", 0)
Sleep(5000)
$sURL = _IEPropertyGet($oIE, "locationurl")
If StringInStr($sURL, ".pdf") Then InetGet($sURL, @ScriptDir & "\test.pdf")
EndFunc