gpt4 book ai didi

excel - vba中的chromedriver Selenium

转载 作者:行者123 更新时间:2023-12-04 20:07:47 25 4
gpt4 key购买 nike

我目前正在努力编码,需要专家的帮助。帮助。该链接主页上有大量类(“df-table”)。通过各种尝试和努力,第一类能够输入到excel表中,但是第二类(“df-table”),第三类(“df-table”)等却很难弄清楚该怎么办。我搜索了各种互联网资源,他们说可以通过使用nth-of-type或使用xpath来解决,但错误不断出现。
我想要的结果是上传图像的数据值。
我不是编码专家,所以如果您认为自己可能难以理解,我将不胜感激。

Public Sub Jaemu()

Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual

Dim d As WebDriver, ws As Worksheet, URL As String

Set d = New ChromeDriver
Set ws = ThisWorkbook.Worksheets("gemstone2")

Dim http As New WinHttpRequest

With d
'.AddArgument "--headless"
.Start "Chrome"

Dim html As HTMLDocument
Dim JsonObject As Object

Set html = New HTMLDocument
URL = "https://globalmonitor.einfomax.co.kr/infomax_ds.html#/USA/1/1"
.get URL, Raise:=False ' set raise to false to avoid a timeout error
d.FindElementByCss("[ng-click='openStockSearchPopup();']").Click
d.FindElementByCss("[ng-enter='searchStockSearchPopup(true);']").SendKeys "GOOGL"
d.FindElementByCss("[ng-click='searchStockSearchPopup(true);']").Click
d.FindElementByCss("[class='slick-cell l1 r1 text-center clickable']").Click
Cells(2, 1).Value = d.FindElementByCss("[class='df-table']").Text
Cells(3, 1).Value = d.FindElementByCss(".table-contents[ng-if='IS_RT_STATE_SUCCESS(requeststate.prospectData)'] > .df-table").Text

End With
End Sub

原始操作错误:
问题编码行是这样的。运行时错误 32。
Cells(3, 1).Value = d.FindElementByCss("[class='df-table' class:nth-of-type(2)]").Text

编辑:遵循使用不同 CSS 选择器的初始建议的新错误:
问题编码行是这样的。运行时错误 7。
Cells(3, 1).Value = d.FindElementByCss(".table-contents[ng-if='IS_RT_STATE_SUCCESS(requeststate.prospectData)'] > .df-table").Text

最佳答案

初始错误 (RTE32):
:nth-of-type() 伪类选择器将超出属性选择器关闭 ]"[class='df-table']:nth-of-type(2)" ,但是这不提供匹配项。
您可以使用:

.table-contents[ng-if='IS_RT_STATE_SUCCESS(requeststate.prospectData)'] > .df-table
这将返回一个匹配并且足够具体,并且不依赖于长选择器列表,因此它可能相当稳定。根据经验。
如果您想使用 :nth-of-type()您本可以在父元素上使用它并进行第一次匹配,但如果 html 更改,则不稳定且容易中断:
.contents-area:nth-of-type(5) .df-table

后续错误(RTE7):
该元素需要滚动到 View 中。
一种不理想的方法是(您的里程可能会有所不同):
d.ExecuteScript "window.scrollTo(0, document.body.scrollHeight/3);"
Application.Wait Now + TimeSerial(0, 0, 2)
Activesheet.Cells(1,3) = d.FindElementByCss(".table-contents[ng-if='IS_RT_STATE_SUCCESS(requeststate.prospectData)'] > .df-table").Text
内置函数和自定义 JS 有更好的方法,您可以从 GitHub 上作者的 examples.xlsm 中提取它们。因为我只能用 Python 进行测试,所以这是一个有效的快速而肮脏的测试。

您可以避免浏览器的开销并使用 XHR 获取 JSON 响应,然后使用 JSON 解析器,如下所示:
Option Explicit

Public Sub GetData()
Dim s As String

With CreateObject("MSXML2.XMLHTTP")
.Open "POST", "https://globalmonitor.einfomax.co.kr/facset/getKeyData", False
.SetRequestHeader "User-Agent", "Mozilla/5.0"
.SetRequestHeader "content-type", "application/json;charset=UTF-8"
.send "{""param"":""NAS:AAPL""}"
s = .responsetext
End With

Debug.Print s

End Sub

关于excel - vba中的chromedriver Selenium ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71959033/

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