#excel #vba
#преуспеть #vba #excel
Вопрос:
Я пытаюсь создать автоматизацию отслеживания FedEx, но мне не удается нажать кнопку отслеживания. есть идеи, пожалуйста?
Sub Fedex()
Dim IE As Object
Dim doc As HTMLDocument
Set IE = New InternetExplorerMedium
IE.Visible = True
IE.navigate "https://www.fedex.com/en-us/home.html"
Do While IE.Busy Or IE.READYSTATE = 4
Loop
Application.Wait (Now TimeValue("0:00:07"))
Set searchbx = IE.document.getElementsByName("trackingnumber")(0)
searchbx.Value = "Howdy!"
IE.document.getElementById("btnSingleTrack").Click
End Sub
Ответ №1:
Редактировать — сделайте это напрямую через параметр url
Вы можете управлять URL-адресом, по которому вы перемещаетесь. Посмотрите на следующий пример. Измените значение последнего параметра YourTrackingNumberHere
на рабочий номер отслеживания и протестируйте его вручную:
https://www.fedex.com/apps/fedextrack/?action=trackamp;cntry_code=usamp;locale=en_USamp;trackingnumber=YourTrackingNumberHere
Первый ответ, чтобы заставить его работать по-вашему
В окне поиска есть события. Вы должны запустить событие изменения после установки вашего номера отслеживания. Я никогда не видел этого раньше, но после запуска события изменения вы должны подождать несколько секунд, чтобы нажатие кнопки сработало.
Sub Fedex()
Dim ie As Object
Dim searchBox As Object
'Initialize Internet Explorer, set visibility,
'call URL and wait until page is fully loaded
Set ie = CreateObject("InternetExplorer.Application")
ie.Visible = True
ie.navigate "https://www.fedex.com/en-us/home.html"
Do While ie.READYSTATE <> 4: DoEvents: Loop
Set searchBox = ie.document.getElementsByName("trackingnumber")(0)
searchBox.Value = "Howdy!"
'Trigger the change event of the input box
Call TriggerEvent(ie.document, searchBox, "change")
'I don't know why, but you have to wait a few seconds
'Otherwise the button click will not work
'In my tests, I need 5 seconds to make it work in every case
'You can make your own tests for your environment
Application.Wait (Now TimeValue("0:00:05"))
ie.document.getElementById("btnSingleTrack").Click
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
Комментарии:
1. это сработало! большое спасибо @Zwenn! могу ли я задать еще один вопрос / вопрос? если я попытаюсь прочитать фактическое значение, подобное этому, я получаю ошибку 438. ‘strAdd = ie.document.getElementsByClassName(«redesignSnapshotTVC.snapshotController_date.dest»).Внутренний текст этой книги. Листы («Лист1»).Диапазон («A2»).Значение = STRADDD’
2. @Petolicious Вы забыли хотя бы индекс в круглых скобках позади
getElementsByClassName()(hereTheIndex)
. Ваш код ожидает полной загрузки страницы, прежде чем вы получите к ней доступ?3. @Zween вот как выглядит поле, в котором указано нужное мне значение <h1 class=»redesignSnapshotTVC tank-заголовок-основной tank-текст-центр tank-заголовок-margin-l» tabindex=»0″>Запланированная доставка: «> Запланированная доставка: </div><div class=»redesignSnapshotTVC snapshotController_date dest»> Среда, 18.11.2020, 16:30 вечера </ div><div class=»redesignSnapshotTVC snapshotController_est dest» style=»отображение: нет;»>
4. <div class=»redesignSnapshotTVC snapshotController_est_time_label dest»></div></div><div class=»Редизайн snapshottvc snapshotController_est_time dest» style=»отображение: отсутствует;»> <span</span>> <span></span></div></h1>
5. @Zween да, код выполняется до этой строки кода. открывается веб-страница, вводится идентификатор отслеживания, нажимается кнопка и отображается дата ETA от Fedex