Web抓取按钮和具有相同类型名称的字段

时间:2019-05-28 09:05:25

标签: excel vba web-scraping

我有一个用于网络抓取的代码。它运行良好,但是经过一些操作后,由于没有将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)上层代码准备好后,我需要单击以下按钮:

enter image description here

我尝试过.querySelector("[name=#]").Click。文字“新决定”在页面语言中正在改变。另外还有其他type="button"按钮。

2)(1)完成后,我需要在该字段中输入值:

enter image description here

我尝试使用.querySelector("[name=questions[0].answer]").Value = "1000" 它给出了一个错误。

3)在(1)和(2)之后,我需要单击一个按钮:

enter image description here

1 个答案:

答案 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返回所有匹配项。