【发布时间】:2018-12-22 02:16:10
【问题描述】:
我在这个网站上尝试了多种代码变体,以让我的 VBA 点击网页上的按钮,但有一次除外,我无法让任何代码正常工作。有一次要么是侥幸,要么是为了尝试添加代码的下一步,我不知何故无意中改变了之前发生的事情。下面是网站的源代码和我目前正在使用的代码。现在我没有收到任何错误,而是在我包含按钮单击代码时加载下一页,如果只是清除表单并停留在当前网页上。
代码:
Public Sub TestIE()
Dim IE As Object
Dim aNodeList As Object, i As Long
Dim bNodeList As Object, p As Long
' Create InternetExplorer Object
Set IE = CreateObject("InternetExplorer.Application")
' You can uncoment Next line To see form results
IE.Visible = False
' Send the form data To URL As POST binary request
IE.Navigate "https://pe.fanniemae.com/pe/pricing/search"
' Statusbar
Application.StatusBar = "Page is loading. Please wait..."
' Wait while IE loading...
Do While IE.Busy
Application.Wait DateAdd("s", 1, Now)
Loop
IE.Visible = True
Set aNodeList = IE.document.querySelectorAll("input[type=checkbox]")
If aNodeList Is Nothing Then Exit Sub
For i = 0 To 18
aNodeList.Item(i).Checked = True
Next i
'IE.document.querySelector("button[type=submit]").Click
Set bNodeList = IE.document.querySelectorAll("button[type=submit]")
If bNodeList Is Nothing Then Exit Sub
For p = 1 To 1
bNodeList.Item(p).Click
Next p
End Sub
页面来源:
<div class="row submit">
<button id="get-price" tabindex="3" type="submit" class="cell-right-
2">Get Prices</button>
<div class="pricing-error-message"></div>
当我检查按钮上的元素时,它确实出现了代码的清晰表单部分,这是我所期望的,但无论出于何种原因,它正在清除表单而不是加载新页面。当我在 IE 中手动单击按钮时,它会按预期加载。
我认为正在运行的脚本:
<script type="text/javascript">
define('pageConf', function() {
return null || JSON.parse('{\"lastPricingFactors\":
{\"priceIncrement\":\"18\",\"priceView\":\"total\",\"executionType\
":\"Mandatory\",\"levelType\":\"Product\",\"remittanceType\":\"ActualActual
\",\"products\":\"160958\",\"1036FR\",\"102422\",\"163053\",\"160639\",\"
160058\",\"155509\",\"154232\",\"143846\",\"0005FR\",\"125331\",\"102301\",
\"114921\",\"115446\",\"144854\"],\"underwrittenWithDu\":false,\"
servicingReleased\":false,\"displayMarketFrozenMessage\":false,\"windows\":
[10,30,60,90],\"requestTimeMs\":1531424470700}}')
});
</script>
【问题讨论】:
-
看看 Selenium WebDriver for VBA。一篇关于它的好帖子:codingislove.com/browser-automation-in-excel-selenium
-
您确定这是要点击的正确元素吗?有没有相关的javascript?您可能需要使用 F12 并查找事件侦听器,并且可能需要执行其他操作以确保实际输入/保留输入的值。
-
相当确定它是正确的元素,屏幕上只有 2 个按钮。使用此方法可以很好地单击另一个按钮,因此可能会按照您的建议进行其他操作。我对 java 的了解还不够,不知道是否有关联。当我右键单击并检查元素时,有一部分代码提到了清除表单,这是我在离开页面时所期望的,但它似乎并没有采取实际移动的下一步。我可以粘贴代码的任何部分来帮助比我更聪明的人吗?
-
在上面添加了可能相关的脚本。