我有一个用于网络抓取的代码。它运行良好,但是经过一些操作后,由于没有将VBA命令连接到的唯一参数,我无法弄清楚该如何进行。
这是我当前的代码:
Sub ChechAutomate()
Dim ie As New InternetExplorer, url As String, ws As Worksheet
Set ws = ThisWorkbook.Sheets("Other Data")
url = "https://infra.com"
With ie
.Visible = True
.Navigate2 url
While .Busy Or .ReadyState < 4: DoEvents: Wend
With .Document
If .querySelectorAll("#login-bis-id-btn").Length > 0 Then
.querySelector("[name=userName]").Value = "username"
.querySelector("[name=password]").Value = "password"
.querySelector("[type=submit]").Click
Else
Application.Wait (Now + TimeValue("00:00:01"))
.querySelector("[id=companySearchKeyData]").Value = ws.Range("T24").Value
.querySelector("[type=submit]").Click
Application.Wait (Now + TimeValue("00:00:01"))
.querySelector("[name=creditType] [value='17']").Selected = True
Application.Wait (Now + TimeValue("00:00:01"))
.querySelector("[id=legalForms] [value='EN']").Selected = True
End If
End With
End With
End Sub
1)上层代码准备好后,我需要单击以下按钮:
我尝试过.querySelector("[name=#]").Click
。文字“新决定”在页面语言中正在改变。另外还有其他type="button"
按钮。
2)(1)完成后,我需要在该字段中输入值:
我尝试使用.querySelector("[name=questions[0].answer]").Value = "1000"
它给出了一个错误。
3)在(1)和(2)之后,我需要单击一个按钮:
答案 0 :(得分:1)
注意:
我们确实需要查看更多html。在没有看到整个HTML(模糊的私人信息)中出现类似1和3的问题的情况下,我只能给出一般的方法来考虑。
问题1)
目前,您至少还有三个选择:
1)获取集合/节点列表和索引以获取正确的按钮/循环所有项目 检查唯一的innerText /属性(如果可用)
Set col = ie.document.getElementsByTagName("input") 'collection. For Each over
Set nodeList = ie.document.querySelectorAll("input") 'nodelist. For i = 0 to nodeList.Length -1
索引:
col(0) 'example index
nodeList.item(0) 'example index
2)找到该元素与另一个捕获该元素的关系。或某种属性组合来识别。有关更多详细信息,请参见答案here。
例如,也许添加父div类
ie.document.querySelector("div.content [type=button]")
3)传递带有语言变体的Or语法的列表
ie.document.querySelector("[value='New decision'], [value='Neue Entscheidung'],[value='Other language variant']")
问题2)
您需要在双引号内使用单引号
ie.document.querySelector("[name='questions[0].answer']").value = 1000
问题3)
根据问题1。
脚注:
记住querySelector
返回模式的第一个匹配项,querySelectorAll
返回所有匹配项。