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

How to test if object property exists before reading its value?

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

所以如果你需要做错误处理你可以做

_IEAction($oIE, 'saveas')
if (@error) then
;error handling here
endif

所以如果你没有收到任何错误,那么你可以选择只保存文件。

我认为您还可以查看 url 和 _IEPropertyGet,看看它是否以“.pdf”结尾。

您需要使用 InetGet 函数来保存 PDF 并检查 URL 以查看它是否是 PDF 文件。

这是一个使用 InetGet 的简单示例。

InetGet("http://careers.whosebug.com/stack_overflow_careers.pdf", @ScriptDir & "\stack_overflow_careers.pdf")

这是一个在页面上查找所有 PDF URL 并下载这些 PDF 的示例。

#include <IE.au3>
#include <Array.au3>

DownloadAllPDFs("http://careers.whosebug.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.whosebug.com/stack_overflow_careers.pdf", 0)
    Sleep(5000)
    $sURL = _IEPropertyGet($oIE, "locationurl")
    If StringInStr($sURL, ".pdf") Then InetGet($sURL, @ScriptDir & "\test.pdf")
EndFunc