наработки из приложения которое стартует по расписанию заходит на страницы интернет банка скачивает выписку, парсит ее и записывает сведения в базу а также скачивает копии платежных документов в пдф.
общая схема
1. выделен отдельный старенький ноут на котором по расписанию две задачи одна перезагрузка раз в сутки вторая -запуск приложения ежечасно в рабочие часы.
2. приложение будучи запущенным с определенным ключом запускает по очереди формы с функционалом работы с тем или иным банком. При этом происходит не взлом ресурса а эмулируется работа пользователя, в том числе выполняются скрипты и формируются динамически создаваемые страницы.
3. на форме размещен контрол webbrowser и кнопка запуска / отладки процесса вручную
4. в ходе работы программый код управляет навигацией в компоненте веббраузер втч проходит аутентификацию т.е. вводит логин и пароль, делает выбор опций, переходит по ссылкам, совершает эмуляцию нажатий на элементы разметки страницы, закачивает файлы втч пдф с защищенных страниц.
из windows-шедулера запускается vbs скрипт следующего содержания
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\.\root\cimv2")
Set colProcessList = objWMIService.ExecQuery _
("Select * from Win32_Process Where Name = 'MSACCESS.exe'")
Set oShell = CreateObject("WScript.Shell")
For Each objProcess in colProcessList
objProcess.Terminate()
Next
access1Xpath = "C:\Program Files (x86)\Microsoft Office\Office12\MSACCESS.EXE"
workdirclientfile = "C:\base\buch\internetbank.adp"
StartupParams = "/CMD robot"
wscript.sleep 2000
oShell.Run """" & access1Xpath & """ """ & workdirclientfile & """ " & StartupParams
как отловить аргумент запуска приложения в функции автозагрузки
ISRobotmode = CStr(Command()) Like "*Robot*"
затем открываем форму и запускаем публичный метод btn_login_Click
DoCmd.OpenForm "webclient"
Forms("webclient").btn_login_Click
некоторые методы работы с вебраузером
вход на страницу аутертификации
Me.WebBrowser1.SetFocus
Me.WebBrowser1.navigate "https://businessinfo.r....k.ru/"
Me.WebBrowser1.Silent = True
wait_ready
при этом сайлент предотвращает появление некоторых ненужных диалогов в случае ошибок скриптов на странице
функция ожидания готовности загрузки страницы может выглядеть так
Private Sub wait_ready()
Do While Me.WebBrowser1.Busy Or Me.WebBrowser1.readyState <> READYSTATE_COMPLETE
DoEvents
Loop
End Sub
ввести логин в определенное поле
Me.WebBrowser1.Document.getElementsByName("Login[id]")(0).Value = "xxxxxxxxxx"
найти кнопку выполнить обработку событий фокус и клик
Set btn = Me.WebBrowser1.Document.getElementsByClassName("js-ajax-load b-btn g-btn")(0)
btn.focus
btn.Click
ввод данных вебформы
Me.WebBrowser1.Document.getElementsByName("Account[dateFrom]")(0).Value = Format(onDate, "dd.mm.yyyy")
отправка данных вебформы
Me.WebBrowser1.Document.Forms.submitForm.submit
сохранение содержимого страницы в файл для парсинга
Dim fso As Object
Set fso = CreateObject("Scripting.FileSystemObject")
Dim Fileout As Object
Set Fileout = fso.CreateTextFile("C:\tmp\outnew" & accID & ".html", True, True)
Fileout.Write WebBrowser1.Document.documentElement.outerHTML
Fileout.Close
загрузка файла по полученной в ходе парсинга ссылке, при этом функция использует текущие кукисы веббраузер контрола, т.е. позволяет скачивать со страниц на которые выполнен защищенный вход, но не вызывает диалога куда сохранять файл.
Public Declare Function URLDownloadToFile Lib "urlmon" Alias "URLDownloadToFileA" (ByVal pCaller As Long, ByVal szURL As String, ByVal szFileName As String, ByVal dwReserved As Long, ByVal lpfnCB As Long) As Long
вызов
URLDownloadToFile 0, "https://businessinfo.r.....k.ru" & url, "C:\tmp\tmpfile.pdf", 0, 0
могут пригодиться инструменты изучения структуры страницы
firefox -> веб разработка -> инструменты разработчика
функция "исследовать элемент" в выпадающем меню
https://www.sql.ru/forum/1307767/nemnozhko-pro-robotov-dlya-sbora-informacii-iz-interneta-na-webbrowser