【问题标题】:Checkbox on web page using Excel VBA使用 Excel VBA 的网页上的复选框
【发布时间】:2019-01-10 12:34:26
【问题描述】:

我正在尝试使用 Excel VBA 检查网页上的复选框。我的代码不起作用。 (没有错误但打勾了)

如何在网页上显示勾号?

我在网络抓取方面做错了吗?


HTML:

<div class="slick-header ui-state-default">
  <div class="slick-header-columns ui-sortable" style="left: -1000px;" unselectable="on">
    <div title="Sélectionner / désélectionner tout" class="ui-state-default slick-header-column" id="slickgrid_951473vssGrid_rowSelect_123527" style="width: 21px;">
      <div class="header">
        <input type="checkbox">
      </div>
    </div>
    <div class="ui-state-default slick-header-column" id="slickgrid_951473purchase_order" style="width: 104px;">
      <div class="header slick-sort-header"><span class="slick-column-name">Bon de commande</span></div><span class="slick-sort-indicator"></span>
      <div class="slick-resizable-handle"></div>
    </div>
    <div class="ui-state-default slick-header-column" id="slickgrid_951473purchase_order_date" style="width: 104px;">
      <div class="header slick-sort-header"><span class="slick-column-name">Date de la commande</span></div><span class="slick-sort-indicator slick-sort-indicator-asc"></span>
      <div class="slick-resizable-handle"></div>
    </div>
    <div class="ui-state-default slick-header-column" id="slickgrid_951473latest_ship_date" style="width: 103px;">
      <div class="header slick-sort-header"><span class="slick-column-name">Date d'expédition maximale</span></div><span class="slick-sort-indicator"></span>
      <div class="slick-resizable-handle"></div>
    </div>
    <div class="ui-state-default slick-header-column" id="slickgrid_951473vendor_code" style="width: 103px;">
      <div class="header slick-sort-header"><span class="slick-column-name">Vendor code</span></div><span class="slick-sort-indicator"></span>
      <div class="slick-resizable-handle"></div>
    </div>
    <div class="ui-state-default slick-header-column" id="slickgrid_951473payee_code" style="width: 103px;">
      <div class="header slick-sort-header"><span class="slick-column-name">Code bénéficiaire</span></div><span class="slick-sort-indicator"></span>
      <div class="slick-resizable-handle"></div>
    </div>
    <div class="ui-state-default slick-header-column" id="slickgrid_951473warehouse_id" style="width: 103px;">
      <div class="header slick-sort-header"><span class="slick-column-name">Entrepôt de destination</span></div><span class="slick-sort-indicator"></span>
      <div class="slick-resizable-handle"></div>
    </div>
    <div class="ui-state-default slick-header-column" id="slickgrid_951473currency_code" style="width: 103px;">
      <div class="header slick-sort-header"><span class="slick-column-name">Devise</span></div><span class="slick-sort-indicator"></span>
      <div class="slick-resizable-handle"></div>
    </div>
    <div class="ui-state-default slick-header-column" id="slickgrid_951473status" style="width: 103px;">
      <div class="header slick-sort-header"><span class="slick-column-name">Statut</span></div><span class="slick-sort-indicator"></span></div>
  </div>
</div>

VBA 代码:

Sub automationAmazon()
    Dim ie As Object
    Set ie = CreateObject("internetexplorer.application")
    With ie
        .Visible = True
        .navigate "link"

        Do While .busy
            DoEvents
        Loop

        Do While .readyState <> 4
            DoEvents
        Loop

    End With

    Set Email = ie.document.getelementbyid("ap_email")
    Email.Value = "email@exemple.com"

    Set Password = ie.document.getelementbyid("ap_password")
    Password.Value = "xxx"

    Set submit = ie.document.getelementbyid("signInSubmit")
    submit.Click

    With ie
        .navigate "link"
        Do While .busy
            DoEvents
        Loop

        Do While .readyState <> 4
            DoEvents
        Loop

    End With

    ie.document.all("searchBy").Value = "PURCHASE_ORDER"
    ie.document.all("purchaseOrderNumber").Value = ThisWorkbook.Sheets("Data").Cells(1, 2).Text
    ie.document.getelementbyid("create-invoice-search-submit").Click

    Dim cBox As Object
    Set cBox = ie.document.getElementsByClassName("header")(0)
    cBox.Click
End Sub

HTML:


【问题讨论】:

  • 很抱歉,这是一个 Intranet 的链接。如果有帮助,我可以与您分享源页面
  • 我试图把所有的信息 :-)

标签: excel vba checkbox web-scraping webpage


【解决方案1】:

您所追求的元素位于表单内的 iframe 内。你必须与他们谈判。我已经从文件中读取了您的 html。

你需要的是:

ie.document.getElementsByTagName("iframe")(0).document.getElementsByTagName("input")(4).Click

表单和 iframe:


我的代码:

Option Explicit
Public Sub test()
    Dim oFSO As Object, oFS As Object, sText As String
    Set oFSO = CreateObject("Scripting.FileSystemObject")
    Set oFS = oFSO.OpenTextFile("C:\Users\User\Desktop\doc.html")

    Do Until oFS.AtEndOfStream
        sText = oFS.ReadAll()
    Loop

    Dim html As New HTMLDocument, b As Object
    html.body.innerHTML = sText
    Set b = html.getElementsByTagName("iframe")(0).document.getElementsByTagName("input")(4)
    Debug.Print b.outerHTML
    b.Click
End Sub

验证正确的元素:

被选元素的outerHTML的直接窗口的打印输出表明选择了正确的元素:


确保页面在每次点击后加载

使用

While IE.Busy Or IE.readyState < 4: DoEvents: Wend 

在每次点击事件后允许页面加载。这包括您在尝试此点击之前在登录序列中执行的点击之后。


读入改编自ozknows的HTML文件脚本。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-08-07
  • 2016-11-01
  • 2018-10-06
  • 2020-05-20
  • 2021-03-25
  • 2014-02-05
  • 2023-03-10
相关资源
最近更新 更多