#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 @Рэймонд Ву 🙂 Спасибо за попытку помочь, может быть, это будет решением в других