【发布时间】:2020-02-04 13:11:20
【问题描述】:
我的代码有一些问题。 它在 Sharepoint 网站上运行良好——它是我练习和完成工作的虚拟网站;但在工作现场它不工作。 问题是,我有电子邮件,从中获取所有元素并尝试在现场自动填写,但没有任何反应 解析是这样的:
Dim ie As InternetExplorerMedium
Set ie = New InternetExplorerMedium
ie.Visible = True
ie.Navigate2 MarrPlazaWebForm
Do
DoEvents
Loop Until ie.Busy <> True Or ie.readyState = READYSTATE_COMPLETE
With ie
.document.getElementById("label-for-pass_date_to").value = dateFrom
.document.getElementById("label-for-pass_date_from").value = dateTo
.document.getElementById("label-for-pass_username").value = guestName
.document.getElementById("label-for-pass_description").value = requestorName
.document.getElementById("pass_full_day").Checked = True
Set elems = .document.getElementsByClassName("btn btn-primary")
For Each e In elems
If (e.getAttribute("type") = "submit") Then
e.Click
Exit For
End If
Next e
End With
On Error Resume Next
ie.Quit
网站不通过 id 获取元素,只是将它们留空
带有元素的站点代码如下所示:
<input type="text" id="label-for-pass_date_to" name="pass_date_from" class="form-control js-datepicker-from hasDatepicker" autocomplete="off" placeholder="From" data-datepicker-disabled-date-before="true" data-mask="date">
<input type="text" id="label-for-pass_date_from" name="pass_date_to" class="form-control js-datepicker-to hasDatepicker" autocomplete="off" placeholder="Untill" data-datepicker-disabled-date-before="true" data-mask="date">
<input type="text" id="label-for-pass_username" name="pass_username[0]" class="form-control" placeholder="Name of guest">
等等……
我怀疑,也许工作站点是用 JavaScript 组成的,而所有 ID 都不是我要找的 有什么建议吗?
【问题讨论】:
-
按 F12 然后检查每个元素
-
在向文本框填值之前,请尝试添加断点或使用Debug.Print方法检查值(如:dateFrom、dateTo和guestName)是否为空?另外,请尝试使用F12开发者工具检查html资源,确保id属性正确,并验证文本框是否位于IFrame中?
-
在 VBA 中,所有值都被填写,但在现场 - 没有。使用断点没有帮助 - 它只是告诉我,文本在那里,但它没有。 ID都是复制粘贴的,所以不应该有任何错别字。唯一困扰我的是,在开发人员模式 (F12) 下,该站点仅在我按下文本输入字段时才开始调试。再次 - 它与它有关,但我不确定
-
Ids 看起来不错,可能需要触发某种形式的事件才能接受值。
-
使用F12开发者工具在IE浏览器中查看html元素时,文本框是否位于IFrame中?是否有一些特殊的容器?
标签: javascript vba internet-explorer web-scraping automation