DOM VBA IE11自动在网站上下订单-发生OnChange和图片上传问题

问题描述 投票:0回答:1

我们有一个虚拟助手,在该网站上下达数百笔球形标记的订单:https://www.golfballs.com/Golf-Misc/Tools/Classic-Photo-Poker-Chips-3-Pack.htm

我以前曾使用VBA从网站上获取数据,但我想使用它来自动下订单。我可以靠近,但有几件事使我绊倒。

首先,当您用鼠标选择一种颜色时,将出现“上传照片”框。我无法使用我的VBA代码显示此框。

Main Ball Marker Page

使用VBA,我无法在我的一生中触发onchange事件。我尝试了以下四种组合:

doc.getElementById("2").selectedIndex = 2
doc.getElementById("2").FireEvent ("onchange")

doc.getElementById("2").Focus
doc.getElementById("2").selectedIndex = 2
doc.getElementById("2").FireEvent ("onchange")

doc.getElementById("2").selectedIndex = 2
doc.getElementById("2").FireEvent ("onclick")

doc.getElementById("2").Focus
doc.getElementById("2").selectedIndex = 2
doc.getElementById("2").FireEvent ("onclick")

[其次,即使我可以显示框并单击“上传照片”,弹出框也在那里,我无法将重点放在该框上,而且不确定如何识别ID“ fileField” ”我想从浏览器中上传什么图片。还会弹出第二个确认。

First Pop Up

Second Pop Up

如果可以上传图片,则可以成功完成自动订购。这是我的代码,方法是单击“添加到购物车”按钮。我的“上传图片”部分的全部内容均无效,并且“选择颜色”下的最后一行没有显示“上传图片”框。

Dim IE As InternetExplorer
Dim doc As HTMLDocument

Set IE = New InternetExplorer
IE.Visible = True

'Go to the Ball Marker Page
ballMarkerURL = "https://www.golfballs.com/Golf-Misc/Tools/Classic-Photo-Poker-Chips-3-Pack.htm"
IE.navigate ballMarkerURL

'Wait for page to load
Do While IE.readyState <> READYSTATE_COMPLETE Or IE.Busy: DoEvents: Loop
Set doc = IE.document

'Select the Color
doc.getElementById("2").Focus
doc.getElementById("2").selectedIndex = 2
doc.getElementById("2").FireEvent ("onchange")

'Upload Picture
markerFilePath = "M:\Cuddle Clones Share (Team Folder)\Operations\Vendors\Pet Prints\0 - Ready to Order - Golfballs.com\"
markerFileName = "380844 - Ball Marker - 200604-Red-1-of-1-qty-1.png"
fullString = markerFilePath & markerFileName
doc.getElementById("copyright_check").Checked
doc.getElementById("fileField").Value = fullString
doc.getElementById("upload").Click
doc.getElementById("saveBtn").Click

'Update Quantity
doc.getElementById("formQty").Value = 2

'Add to Cart
doc.getElementsByClassName("buttonStatic r addCart")(0).Click
excel vba dom onchange
1个回答
0
投票

[在大多数情况下,您不能使用触发事件。过时了您必须调度一个事件。这是您可以从下拉菜单中选择颜色的方法:

Sub SelectColorForGolfballs()

Dim browser As Object
Dim url As String
Dim nodeColorDropDown As Object

  url = "https://www.golfballs.com/Golf-Misc/Tools/Classic-Photo-Poker-Chips-3-Pack.htm"

  'Initialize Internet Explorer, set visibility,
  'call URL and wait until page is fully loaded
  Set browser = CreateObject("internetexplorer.application")
  browser.Visible = True
  browser.navigate url
  Do Until browser.ReadyState = 4: DoEvents: Loop

  'Select color from dropdown
  Set nodeColorDropDown = browser.document.getElementById("2")
  nodeColorDropDown.selectedIndex = 6 'Pink for testing
  Call TriggerEvent(browser.document, nodeColorDropDown, "change")
  'Manual break for loading the page complitly
  'Application.Wait (Now + TimeSerial(pause_hours, pause_minutes, pause_seconds))
  Application.Wait (Now + TimeSerial(0, 0, 2))

  'here more code
  '...
  '...
End Sub

并且此函数可触发您需要的事件:

Private Sub TriggerEvent(htmlDocument As Object, htmlElementWithEvent As Object, eventType As String)

  Dim theEvent As Object

  htmlElementWithEvent.Focus
  Set theEvent = htmlDocument.createEvent("HTMLEvents")
  theEvent.initEvent eventType, True, False
  htmlElementWithEvent.dispatchEvent theEvent
End Sub
© www.soinside.com 2019 - 2024. All rights reserved.