Проблема очистки веб-страниц VBA — как перемещаться по определенному веб-сайту с помощью структуры html (href / дочерний/ )

#html #vba #internet-explorer #web-scraping

Вопрос:

Здравствуйте, уважаемые коллеги VBA 🙂

 Sub login()
'test 
    Const URL$ = "https://kwm.kromi.de/cgi-bin/kwm?HTML=frontend/login.htm"
    Dim UserName As String, Password As String, LoginData As Worksheet
    Set LoginData = ThisWorkbook.Worksheets("Sheet1")
    UserName = LoginData.Cells(1, "B").Value
    Password = LoginData.Cells(2, "B").Value
    Dim IE As Object
    Set IE = CreateObject("InternetExplorer.Application")
    With IE
        .Visible = False
        .Navigate URL
        ieBusy IE
        .Visible = True
       Dim oLogin As Object, oPassword As Object
        Set oLogin = .document.getElementsByName("VS_LOGIN")(0)
        Set oPassword = .document.getElementsByName("VS_PASSWORD")(0)
        oLogin.Value = UserName
        oPassword.Value = Password
        .document.forms(0).submit
        ieBusy IE
       Stop
       '.document.getElementsByTagName("a")(2).href
       '.document.getElementsByClassName("link3").Click
     .Navigate2 ""
     ieBusy IE
     Stop
    End With
'''
End Sub
Sub ieBusy(IE As Object)
    Do While IE.Busy Or IE.readyState < 4
        DoEvents
    Loop
End Sub
 

И первая задача-работа, макрос входа на сайт. Мне нужно углубиться и нажать на что-то, но структура сети слишком велика для моей маленькой головы, я ищу несколько примеров на веб-сайте, но ничего не работает. Я показал код веб-сайта ниже. Мне нужно нажать кнопку «statystyka».

/html/body/div[1]/div[1]/a[2] — Адрес Xpath [изображение ссылки]https://ibb.co/2Pgx2tn

Не могли бы вы мне немного помочь, пожалуйста 🙂

редактировать: Я пытался использовать что-то вроде этого: '.document.getElementsByTagName("a")(2).href но это не очень хороший способ думать

Комментарии:

1. Что это nothing work значит? Вы нажали на него, но ничего не произошло, или есть какая-то ошибка?

2. Похоже, что ссылка на самом деле запускает Javascript, поэтому google продолжает ExecScript , чтобы узнать, как выполнить Javascript с помощью IE.

3. @Raymond Wu ,Для меня проблема в том, как перемещаться по этой структуре документа, она связана со структурой html и зависимостью html (doc -> head ->>div и т. Д.). Я не знаю, как правильно выбрать строку (я предполагаю, что люди с опытом работы с html и vba знали, как это сделать): <a href="" onclick="OneInOne('https://kwm.kromi.de:443/cgi-bin/kwm?HTML=frontend/statistic/stat_current.htmamp;amp;ID=C466409C6997DADCE06C38B36731BA92',6); return false;">Statystyka</a> Я попробовал что-то вроде этого '.document.getElementsByTagName("a")(2).href

4. Я создал простой пример, чтобы проверить ответ Харра, и он хорошо работает. Однако мы не можем получить доступ к предоставленной вами странице, поэтому я боюсь, что вы не сможете воспроизвести свою проблему.

5. @Raymond Wu Я жду ответа QHarr, может быть, у него есть какая-то идея или другой способ попробовать.

Ответ №1:

Вам нужно перейти в соответствующий кадр, добавить ожидание , как я использую .Перейдите к кадру src , затем вы можете выбрать цель по подстроке onclick атрибута:

 ie.navigate ie.document.querySelector("[name=Navigator]").src
ieBusy ie
ie.document.querySelector("[onclick*=statistic]").click
 

Комментарии:

1. Здравствуйте, спасибо @QHarr я попробовал Ваш код ie.navigate ie.document.querySelector("[name=Navigator]").src <br/> после этой строки перейдите на сайт с помощью меню <br/><br/> <br/> ie.document.querySelector("[onclick*=statistic]").click <br/> после этой строки выйдите из системы, чтобы войти на сайт . У тебя есть идея? <br/>

2. Щелчок выводит вас из системы?

3. Спасибо, дорогой коллега, за Ваш ответ, я пытаюсь показать Вам на картинке, обычно, когда Вы нажимаете вручную, вы получаете что-то вроде этого ( ibb.co/WykqLnW ) при использовании VBA это выглядит так ( ibb.co/bLfsNpK ) и resul выходит из системы ( ibb.co/mtPc1KS )

4. есть ли такой другой способ выбрать эту кнопку? Вы знаете какую-нибудь возможность?

5. Попробуйте разместить ie.document.querySelector("[onclick*=statistic]").click с ie.document.parentWindow.ExecScript Replace$(ie.document.querySelector("[onclick*=statistic]").getAttribute("onclick"), " return false;", "") — Кроме того, есть ли какие-либо другие шаги, которые должны происходить между ними?

Ответ №2:

Если вы хотите перемещаться по тегу, вам нужно установить рамку, как показано ниже

 Dim doc As HTMLDocument
Dim doc2 As HTMLDocument
Dim lnk As HTMLLinkElement

Set doc = IE.document
 Set doc2 = doc.frames("Navigator").document
 Set lnk = doc2.getElementsByTagName("A")(1)
 lnk.Click
 

@QHarr @Рэймонд Ву 🙂 Спасибо за попытку помочь, может быть, это будет решением в других