如何在读取其值之前测试对象 属性 是否存在?
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
我的 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