Здорова коданы!Речь пойдет о Document Object Model https://www.w3.org/DOM/ а точнее о том как скрестить его с VBA (макрос в экселе)Как я понимаю DOM это API для XML документов. Все кто кодит на JavaScript знает о нем не по наслышке.Затеял я написать web-парсер в VBA опираясь на DOM.Пару слов о том зачем мне это. Однажды я уже написал парсер в виде макроса в экселевском фале который получает HTML код страницы (при помощи запроса MSXML2.XMLHTTP) в виде огромного огромного куска текста и вытаскивает из него регулярными выражениями все что требуется. И все было хорошо ровно до того момента пор пока я не столкнулся с веб страницей, контент на которой генерируется яваскриптом. Там мой парсер оказался вообще бесполезен, ведь сам запрос возвращал не информативную ерунду. Поиски решения привели меня к DOM - им я могу достать чего то полезное с таких страниц. Да впрочем и вообще со всех, лол, судя по всему надо было сразу же на нем парсер писать, но я говнокодер от сохи не знал что он существует.Писать я собираюсь на VBA и дальше, потому что в конечном итоге мне надо тащить эту информацию в эксель и в ворд, смысла для этого писать в чем то другом что бы потом все равно тащить в MSофис не вижу.В чем принцип работы. Я запускаю Internet Explorer - во первых потому что есть везде, а во вторых потому что туда куда мне надо пускает только его (требует настроенный криптопровайдер и ключ ЭЦП). Далее посылаю в браузер команды и получаю из него объекты DOM, которые могу как менять: заполнять поля, жать на кнопки, так и читать их свойства - то есть полезную мне инфу.С прелюдией закончил, перехожу к сути.В процессе работы столкнулся с некоторыми трудностями, вызванными слабым пониманием как пользоваться DOM. А именно:1. Я не понимаю как эффективнее всего смотреть дерево нодов2. Я не понимаю почему то что я делаю не дает нужный результатНиже пример моего кода на котором я застрял и не могу понять что не так.По итогу я получаю окно браузера IE с прогруженным сайтом google.ru в поисковой строке которого вбито значение "2ch", но кнопка поиска почему то не прожата. Если я мышкой кликаю в окно то оно меняется и приобретает вид страницы с результатами поиска но так же как будто кнопка была не прожата - то же самое я получу если просто начну заполнять строку поиска.Вопрос - что я делаю не так и как мне атоматизировать клик по кнопке что бы получить в браузере результаты поиска гугла? (соответсвенно и возможность их программно прочитать)На этом вопросы не заканчиваются но пойду по порядку.Option ExplicitSub googleAutomation() 'try to automate google request 'initialization Dim IE As Object Dim myNodeCollection As Object Dim myNode As Object On Error GoTo closeIE 'close IE if something went wrong Set IE = CreateObject("InternetExplorer.Application") IE.Navigate "https://www.google.ru/" 'delay Do While IE.Busy Application.Wait DateAdd("s", 1, Now) Loop 'get nodes from IE Set myNodeCollection = IE.document.getElementsByTagName("input") 'iterate trough node collection to fill search field For Each myNode In myNodeCollection If myNode.Name = "q" Then myNode.Value = "2ch" End If Next myNode 'iterate again trough node collection to click search button For Each myNode In myNodeCollection If myNode.Name = "btnK" Then myNode.Click End If Next myNode 'delay Do While IE.Busy Application.Wait DateAdd("s", 1, Now) Loop IE.Visible = TrueExit Sub 'to prevent error handler from readingcloseIE: IE.Quit 'for close IE process End Sub
Бля, уважуха, браток. Я вот не написал макросов сложнее фильтрации и разбивки данных по файлам с форматированием. Да и никому просто не нужно было ничего сложнее. А что ты делаешь? Следилку?
Спасибо на добром слове. Я пытаюсь автоматизировать получение данных с электронной торговой площадки.Вообще я давно уже редактор экселевский не по назначению применяю. Даже автоматизированную торговую систему писал в нем с интерфейсом и генерацией протоколов по итогам торгов. Но я этим не горжусь, это все от незнания других языков. Так то давно пора мигрировать на C# и учитсья писать web приложения на ASP .NET MVCКак бы там ни было я не программист а энтузиаст самоучка. По этому еще немного по терзаю VBA что бы парсер этот дописать т.к. времени уйдет больше что бы его же реализовать в чем то другом чем тут домучать.