如何在读取其值之前测试对象属性是否存在?

时间:2015-10-06 18:45:17

标签: internet-explorer pdf autoit

我的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(我需要保存)。

2 个答案:

答案 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