gpt4 book ai didi

excel - 当使用 vba 单击搜索按钮时,网页看不到在搜索框中输入的文本

转载 作者:行者123 更新时间:2023-12-01 05:35:27 25 4
gpt4 key购买 nike

我已经编写了用于在以下网站的搜索框中输入制造商部件号并单击搜索图标的 vba 代码。它可以在搜索框中输入制造商部件号并单击搜索图标,但是当“单击搜索图标时,不会拾取在文本框中输入的文本”。它搜索空数据。

'HTML Part for search icon

<a href="javascript:void(0);" style="float: right; width: 20%; height: 55px; border-top-right-radius: .25rem!important; border-bottom-right-radius: .25rem!important; border: 0; padding: 0!important; background: #dadada; margin: 0!important; display: flex; align-items: center;justify-content: center;text-decoration: none;" ng-click="SearchButtonClick(1)"><em class="fa fa-search" aria-hidden="true" style="color: gray;"></em></a>

差不多一个月了,我尝试了各种不同的方法,这些方法也在堆栈溢出中提到过,比如使用“createEvent(“keyboardevent”)”但没有任何效果。

' VBA code 
Sub AptivScrapping()

Dim IE As SHDocVw.InternetExplorer
Set IE = New InternetExplorer
IE.Visible = True

IE.navigate "https://ecat.aptiv.com"

Do While IE.readyState < READYSTATE_COMPLETE
Loop

Dim idoc As MSHTML.HTMLDocument
Set idoc = IE.document

idoc.getElementById("searchUserInput").Value = "33188785"

Dim doc_ele As MSHTML.IHTMLElement
Dim doc_eles As MSHTML.IHTMLElementCollection

Set doc_eles = idoc.getElementsByTagName("a")

For Each doc_ele In doc_eles
If doc_ele.getAttribute("ng-click") = "SearchButtonClick(1)" Then
doc_ele.Click
Exit Sub
Else
End If
Next doc_ele

End Sub

最佳答案

该页面执行 xhr 请求以检索搜索结果。单击提交后,您可以在网络选项卡中找到它。在这种情况下,这意味着您可以避免浏览器的开销并发出 xhr 请求。响应是 json,因此您确实需要一个 json 解析器来处理结果。

我会使用 jsonconverter.bas解析json。在名为 JsonConverter 的标准模块中安装来自该链接的代码后,转到 VBE > 工具 > 引用 > 添加对 Microsoft Scripting Runtime

的引用

我对一个数组进行维数以保存结果。我根据返回的 json 集合中的项目数确定行,并根据第一个项目字典的大小确定列数。我循环 json 对象,并在内部循环集合中每个字典的字典键,并填充数组。我在最后一次性写出数组,这样 i/o 成本更低。

Option Explicit

Public Sub GetInfo()
Dim json As Object, ws As Worksheet, headers()
Dim item As Object, key As Variant, results(), r As Long, c As Long

Set ws = ThisWorkbook.Worksheets("Sheet1")
With CreateObject("MSXML2.XMLHTTP")
.Open "GET", "https://ecat.aptiv.com/json/eCatalogSearch/SearchProducts?filter=All&options=&pageSize=10&search=33188785", False
.send
Set json = JsonConverter.ParseJson(.responseText)("Products")
End With
headers = json.item(1).keys
ReDim results(1 To json.Count, 1 To UBound(headers) + 1)
For Each item In json
r = r + 1: c = 1
For Each key In item.keys
results(r, c) = item(key)
c = c + 1
Next
Next
With ws
.Cells(1, 1).Resize(1, UBound(headers) + 1) = headers
.Cells(2, 1).Resize(UBound(results, 1), UBound(results, 2)) = results
End With

关于excel - 当使用 vba 单击搜索按钮时,网页看不到在搜索框中输入的文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57443410/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com