我在vba中使用下面的代码,
Set results = Doc.getElementsByClassName("a-size-large a-color-price olpOfferPrice a-text-bold")
If results.Length > 0 Then
但是长度只在调试模式下给出> 1而不是在运行模式下,我检查了网站并给出了上面提到的类,但是在调试模式下工作过于苛刻,这也是逐行调试模式并且在运行时不起作用模式。
由于 DJ
答案 0 :(得分:1)
假设您的代码尝试从网站获取数据,请使用以下方法获取数据。 在执行IF条件之前,此代码将一直等到获取HTML数据。 (参考:Code Snippet from this website)
$Query = "INSERT INTO `9154804_data` (`Parent`, `Name`)
VALUES ($Section, $inputdata);";
$InsertData = $mysqli->query($Query);
if ($InsertData){
$InsertID = $mysqli->insert_id;
$Return['Success'] = "Successfully added.";
}else{
$Return['Error'] = "Something went wrong!";
}
答案 1 :(得分:1)
听起来您正在加载文档,但在您尝试检查文档之前它尚未完成。在调试模式下运行时,文档有时间完成加载。强制VBA等待文档完全加载的最佳方法是在同步模式下打开URL /文档。您还需要检查文档请求是否返回了有效的HTTP状态代码。
如果您的文档源是有效的XML / XHTML,那么您可以直接从XMLHttpRequest获取文档对象,但我假设您使用普通的旧HTML。
您需要知道XMLHttpRequest将检索页面的HTML内容,但它不会加载或运行任何支持脚本/ css,因此,如果这些脚本中的任何一个将生成动态HTML内容,然后它将不会出现在HTML文档中。
Sub Test()
Const URL As String = "http://stackoverflow.com"
Const CLASS_NAME As String = "row-fluid"
'The getElementsByClassName method is unavailable under some/all IE versions?
'It seems to need to be strongly typed as MSHTML.HTMLDocument
'You'll need to Add a reference to Microsoft HTML Object Libarary
Dim oDoc As MSHTML.HTMLDocument
Dim results As Object
With CreateObject("MSXML2.XMLHttp")
.Open "GET", "http://www.microsoft.com", False
.send
'Check the response is valid
If .Status = 200 Then
Set oDoc = CreateObject("htmlfile")
oDoc.body.innerHTML = .responseText
Set results = oDoc.getElementsByClassName(CLASS_NAME)
End If
End With
End Sub
答案 2 :(得分:0)
通过检查IE的ReadyState
和Busy
属性,确保在尝试访问DOM元素之前加载页面:
Sub Foo()
Const READYSTATE_COMPLETE As Integer = 4
Set IE = CreateObject("InternetExplorer.Application")
IE.Navigate "http://www.stackoverflow.com"
'// The important bit:
While IE.ReadyState <> READYSTATE_COMPLETE Or IE.Busy
DoEvents
Wend
'// Rest of your code, presumably something like:
Set Doc = IE.Document
Set results = Doc.getElementsByClassName("a-size-large a-color-price olpOfferPrice a-text-bold")
If results.Length > 0 Then
'// Rest of code here .....
End Sub