Как программно ввести ник и пароль через интерфейс IWebBrowser2

Тема в разделе "WASM.BEGINNERS", создана пользователем assch, 10 окт 2017.

  1. assch

    assch Member

    Публикаций:
    0
    Регистрация:
    17 мар 2011
    Сообщения:
    192
    Пробую программно сделать вход в сбербанк-онлайн
    я работаю на платформе masm32 обёрнутую в мою макросную стилистику
    мой код:
    Код (ASM):
    1.  
    2. @dll ole32
    3. ;----------------------------------------
    4. @gp Url u"https://node2.online.sberbank.ru"
    5. ;---------------------------------------
    6. @GUID CLSID_InternetExplorer   "0002DF01-0000-0000-C000-000000000046"
    7. @GUID IID_IWebBrowser2         "D30C1661-CDAF-11D0-8A3E-00C04FC9E26E"
    8. ;---------------------------------------
    9. f OleInitialize,0
    10. f CoCreateInstance,a CLSID_InternetExplorer,0,CLSCTX_LOCAL_SERVER,a IID_IWebBrowser2,a pInterface
    11. ;---------------------------------------
    12. fc pInterface,164,VARIANT_TRUE    ;IID_IWebBrowser2.put_Visible   [164]
    13. fc pInterface,44,a Url,0,0,0,0    ;IID_IWebBrowser2.Navigate      [44]
    14. ;---------------------------------------
    15. @Exit
    16. ;---------------------------------------
    17. @End
    18.  
    Под капотом компилятор формирует этот код:
    Код (ASM):
    1.  
    2. .686
    3. .xmm
    4. .model flat,stdcall
    5. option casemap :none
    6. include \masm32\$asm\include\BASIS.inc
    7. include \masm32\$asm\include\Kernel32.inc
    8. includelib \masm32\$asm\lib\kernel32.lib
    9. include \masm32\$asm\include\User32.inc
    10. includelib \masm32\$asm\lib\user32.lib
    11. .code
    12. start:
    13. assume es:nothing,ss:nothing,fs:nothing,gs:nothing
    14. include \masm32\$asm\include\Ole32.inc
    15. includelib \masm32\$asm\lib\ole32.lib
    16. .data
    17. dd 64
    18. Url dw "h","t","t","p","s",":","/","/","n","o","d","e","2",".","o","n","l","i","n","e"
    19. dw ".","s","b","e","r","b","a","n","k",".","r","u",0
    20. .code
    21. .const
    22. CLSID_InternetExplorer dd 00002DF01h
    23. dw 00000h
    24. dw 00000h
    25. db 0C0h,000h,000h,000h,000h,000h,000h,046h
    26. .code
    27. .const
    28. IID_IWebBrowser2 dd 0D30C1661h
    29. dw 0CDAFh
    30. dw 011D0h
    31. db 08Ah,03Eh,000h,0C0h,04Fh,0C9h,0E2h,06Eh
    32. .code
    33. push 0
    34. call OleInitialize
    35. .data?
    36. pInterface dword ?
    37. .code
    38. push offset pInterface
    39. push offset IID_IWebBrowser2
    40. push CLSCTX_LOCAL_SERVER
    41. push 0
    42. push offset CLSID_InternetExplorer
    43. call CoCreateInstance
    44. push VARIANT_TRUE
    45. mov eax,pInterface
    46. push eax
    47. mov eax,[eax]
    48. call dword ptr [eax+164]
    49. push 0
    50. push 0
    51. push 0
    52. push 0
    53. push offset Url
    54. mov eax,pInterface
    55. push eax
    56. mov eax,[eax]
    57. call dword ptr [eax+44]
    58. xor eax,eax
    59. push eax
    60. call ExitProcess
    61. end start
    62.  
    Программа открывает страницу сбербанка-онлайн в - Internet Explorer
    где предлагает ввести логин и пароль

    Кто в теме
    можно ли программно ввести логин и пароль через интерфейс

    сам интерфейс в виде структуры:
    Код (ASM):
    1.  
    2. IWebBrowser2 STRUCT
    3.    QueryInterface            DWORD  ?  ;[0] (This,riid,ppvObject)
    4.    AddRef                    DWORD  ?  ;[4] (This)
    5.    Release                   DWORD  ?  ;[8] (This)
    6.    GetTypeInfoCount          DWORD  ?  ;[12] (This,pctinfo)
    7.    GetTypeInfo               DWORD  ?  ;[16] (This,iTInfo,lcid,ppTInfo)
    8.    GetIDsOfNames             DWORD  ?  ;[20] (This,riid,rgszNames,cNames,lcid,rgDispId)
    9.    Invoke                    DWORD  ?  ;[24] (This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
    10.    GoBack                    DWORD  ?  ;[28] (This)
    11.    GoForward                 DWORD  ?  ;[32] (This)
    12.    GoHome                    DWORD  ?  ;[36] (This)
    13.    GoSearch                  DWORD  ?  ;[40] (This)
    14.    Navigate                  DWORD  ?  ;[44] (This,URL,Flags,TargetFrameName,PostData,Headers)
    15.    Refresh                   DWORD  ?  ;[48] (This)
    16.    Refresh2                  DWORD  ?  ;[52] (This,Level)
    17.    Stop                      DWORD  ?  ;[56] (This)
    18.    get_Application           DWORD  ?  ;[60] (This,ppDisp)
    19.    get_Parent                DWORD  ?  ;[64] (This,ppDisp)
    20.    get_Container             DWORD  ?  ;[68] (This,ppDisp)
    21.    get_Document              DWORD  ?  ;[72] (This,ppDisp)
    22.    get_TopLevelContainer     DWORD  ?  ;[76] (This,pBool)
    23.    get_Type                  DWORD  ?  ;[80] (This,Type)
    24.    get_Left                  DWORD  ?  ;[84] (This,pl)
    25.    put_Left                  DWORD  ?  ;[88] (This,Left)
    26.    get_Top                   DWORD  ?  ;[92] (This,pl)
    27.    put_Top                   DWORD  ?  ;[96] (This,Top)
    28.    get_Width                 DWORD  ?  ;[100] (This,pl)
    29.    put_Width                 DWORD  ?  ;[104] (This,Width)
    30.    get_Height                DWORD  ?  ;[108] (This,pl)
    31.    put_Height                DWORD  ?  ;[112] (This,Height)
    32.    get_LocationName          DWORD  ?  ;[116] (This,LocationName)
    33.    get_LocationURL           DWORD  ?  ;[120] (This,LocationURL)
    34.    get_Busy                  DWORD  ?  ;[124] (This,pBool)
    35.    Quit                      DWORD  ?  ;[128] (This)
    36.    ClientToWindow            DWORD  ?  ;[132] (This,pcx,pcy)
    37.    PutProperty               DWORD  ?  ;[136] (This,Property,vtValue)
    38.    GetProperty               DWORD  ?  ;[140] (This,Property,pvtValue)
    39.    get_Name                  DWORD  ?  ;[144] (This,Name)
    40.    get_HWND                  DWORD  ?  ;[148] (This,pHWND)
    41.    get_FullName              DWORD  ?  ;[152] (This,FullName)
    42.    get_Path                  DWORD  ?  ;[156] (This,Path)
    43.    get_Visible               DWORD  ?  ;[160] (This,pBool)
    44.    put_Visible               DWORD  ?  ;[164] (This,Value)
    45.    get_StatusBar             DWORD  ?  ;[168] (This,pBool)
    46.    put_StatusBar             DWORD  ?  ;[172] (This,Value)
    47.    get_StatusText            DWORD  ?  ;[176] (This,StatusText)
    48.    put_StatusText            DWORD  ?  ;[180] (This,StatusText)
    49.    get_ToolBar               DWORD  ?  ;[184] (This,Value)
    50.    put_ToolBar               DWORD  ?  ;[188] (This,Value)
    51.    get_MenuBar               DWORD  ?  ;[192] (This,Value)
    52.    put_MenuBar               DWORD  ?  ;[196] (This,Value)
    53.    get_FullScreen            DWORD  ?  ;[200] (This,pbFullScreen)
    54.    put_FullScreen            DWORD  ?  ;[204] (This,bFullScreen)
    55.    Navigate2                 DWORD  ?  ;[208] (This,URL,Flags,TargetFrameName,PostData,Headers)
    56.    QueryStatusWB             DWORD  ?  ;[212] (This,cmdID,pcmdf)
    57.    ExecWB                    DWORD  ?  ;[216] (This,cmdID,cmdexecopt,pvaIn,pvaOut)
    58.    ShowBrowserBar            DWORD  ?  ;[220] (This,pvaClsid,pvarShow,pvarSize)
    59.    get_ReadyState            DWORD  ?  ;[224] (This,plReadyState)
    60.    get_Offline               DWORD  ?  ;[228] (This,pbOffline)
    61.    put_Offline               DWORD  ?  ;[232] (This,bOffline)
    62.    get_Silent                DWORD  ?  ;[236] (This,pbSilent)
    63.    put_Silent                DWORD  ?  ;[240] (This,bSilent)
    64.    get_RegisterAsBrowser     DWORD  ?  ;[244] (This,pbRegister)
    65.    put_RegisterAsBrowser     DWORD  ?  ;[248] (This,bRegister)
    66.    get_RegisterAsDropTarget  DWORD  ?  ;[252] (This,pbRegister)
    67.    put_RegisterAsDropTarget  DWORD  ?  ;[256] (This,bRegister)
    68.    get_TheaterMode           DWORD  ?  ;[260] (This,pbRegister)
    69.    put_TheaterMode           DWORD  ?  ;[264] (This,bRegister)
    70.    get_AddressBar            DWORD  ?  ;[268] (This,Value)
    71.    put_AddressBar            DWORD  ?  ;[272] (This,Value)
    72.    get_Resizable             DWORD  ?  ;[276] (This,Value)
    73.    put_Resizable             DWORD  ?  ;[280] (This,Value)
    74. IWebBrowser2 ENDS
    75.  
     
  2. assch

    assch Member

    Публикаций:
    0
    Регистрация:
    17 мар 2011
    Сообщения:
    192
    В этом примере мы открыли страницу в - Internet Explorer
    интересно а можно то же самое сделать только чтобы страница открылась в браузере - Chrome
    для этого понадобится CLSID хрома и если да то где его можно взять
    или подобная реализация доступна только для браузера - Internet Explorer
     
  3. rmn

    rmn Well-Known Member

    Публикаций:
    0
    Регистрация:
    23 ноя 2004
    Сообщения:
    2.329
    assch,
    Нет, кроме МС никто больше этой наркоманией не занимается. И если уж так хочется покодить activex на винапи, открывай в мсдн раздел COM и начинай читать. Читать придется много, а писать еще больше.
     
  4. justice

    justice New Member

    Публикаций:
    0
    Регистрация:
    13 фев 2012
    Сообщения:
    7
    В любом браузере включаете режим разработчика
    Авторизируетесь, смотрите какие параметры передаются через POST запрос, какой приходит ответ
    Делаете в своей программе то-же самое, типо того (сократил немного):

    Код (Text):
    1.  
    2. POST /CSAFront/login.do HTTP/1.1
    3. Host: online.sberbank.ru
    4. Connection: keep-alive
    5. Content-Length: 8867
    6. Pragma: no-cache
    7. Cache-Control: no-cache
    8. Origin: https://online.sberbank.ru
    9. User-Agent: Mozilla/5.0
    10. Content-Type: application/x-www-form-urlencoded; charset=UTF-8
    11. Accept: */*
    12. X-Requested-With: XMLHttpRequest
    13. Referer: https://online.sberbank.ru/CSAFront/index.do
    14. Accept-Encoding: gzip, deflate, br
    15. Accept-Language: ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4
    16.  
    17. fakeLogin=&fakePassword=&field(login)=aaaaa&field(password)=bbbbbb&deviceprint=version=3.4.0.0_2
    18.  
     
    assch нравится это.
  5. assch

    assch Member

    Публикаций:
    0
    Регистрация:
    17 мар 2011
    Сообщения:
    192
    Интересная мысль попробую
     
  6. Thetrik

    Thetrik UA6527P

    Публикаций:
    0
    Регистрация:
    25 июл 2011
    Сообщения:
    860
    С большой вероятностью да. Получаешь доступ к IHTMLDocument3 через get_Document получаешь нужные элементы (IHTMLElement) через getElementById, getElementsByName или getElementsByTagName. Далее через свойство outertext задаешь логин и пароль, а через метод click нажимаешь на кнопку.
    Тоже самое можно получить через коллекции IHTMLDocument2::forms, IHTMLDocument2::all или IHTMLDocument2::body. В общем много вариантов.
     
    TermoSINteZ нравится это.
  7. TermoSINteZ

    TermoSINteZ Синоби даоса Команда форума

    Публикаций:
    2
    Регистрация:
    11 июн 2004
    Сообщения:
    3.546
    Адрес:
    Russia