сайт oracle vba xmlhttp

#javascript #ajax #vba #xmlhttprequest

Вопрос:

Я бьюсь головой уже неделю, не имея возможности продвинуться вперед, я пытаюсь автоматизировать запрос отчета oralce erpd с помощью xmlhttp, так как мы знаем, что IE скоро будет прекращен, и мне нужно искать альтернативный метод для получения автоматических отчетов от oracle.

я знаю, что у нас есть selenium, который сделает это с помощью vba, но установка его на каждом компьютере пользователя и наша политика организации затрудняют использование основ selenium.

не так хорошо разбираясь в AJAX, я только начал изучать его и двигался в правильном направлении, пока не возникла необходимость нажать кнопку, чтобы активировать скрытую форму.

есть ли какой-либо способ добиться этого с помощью XMLhttp, любая помощь в этом будет высоко оценена.

альтернативные методы, такие как Jscript, работающие с браузером chrome или edge, также будут работать, но они должны быть динамическими и должны иметь возможность передавать параметры в соответствии с пользователем

 Dim XMLHTTP As MSXML2.XMLHTTP60, htmldoc As MSHTML.HTMLDocument

Dim htmldiv As MSHTML.IHTMLElement, htmltable As MSHTML.htmltable
Dim htmlelement As MSHTML.HTMLDivElement, htmlelem As IHTMLElementCollection
Dim tabrows As MSHTML.HTMLTableRow, tabcell As MSHTML.HTMLTableCell
Dim URL As String, strCookie As String

Set XMLHTTP = New XMLHTTP60
'visiting homepage
URL = "https://erpprd.ABC_company.com/OA_HTML/OA.jsp?OAFunc=OANEWHOMEPAGE"
XMLHTTP.Open "Get", URL, False
XMLHTTP.send
strCookie = XMLHTTP.getAllResponseHeaders
strCookie = Split(Split(strCookie, "Cookie:")(1), ";")(0)
XMLHTTP.Open "GET", URL, False
XMLHTTP.setRequestHeader "Cookie", Trim(strCookie)
XMLHTTP.setRequestHeader "User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.77 Safari/537.36"
XMLHTTP.setRequestHeader "Content-Type", "text/html; charset=UTF-8"
XMLHTTP.setRequestHeader "sec-ch-ua", "Chromium;v=92, Not A;Brand;v=99, Google Chrome;v=92"
XMLHTTP.setRequestHeader "Sec-Fetch-Mode", "navigate"
XMLHTTP.setRequestHeader "Sec-Fetch-Site", "none"
XMLHTTP.setRequestHeader "Sec-Fetch-User", "?1"
XMLHTTP.setRequestHeader "Host", "erpprd.jacobs.com"
XMLHTTP.setRequestHeader "Connection", "keep-alive"
XMLHTTP.setRequestHeader "Accept-Language", "en-US,en;q=0.9"
XMLHTTP.setRequestHeader "Accept", "text/html,application/xhtml xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9"
XMLHTTP.send


If XMLHTTP.Status <> 200 Then MsgBox "Oops Failed": Exit Sub


'info of main menu and folder ID details which will be used for getting parameters

URL = "https://erpprd.abc_company.com/OA_HTML/RF.jsp?function_id=MAINMENURESTamp;security_group_id=0"
    
XMLHTTP.Open "POST", URL, False
XMLHTTP.send
strCookie = XMLHTTP.getAllResponseHeaders
strCookie = Split(Split(strCookie, "Cookie:")(1), ";")(0)
XMLHTTP.Open "POST", URL, False

XMLHTTP.setRequestHeader "Cookie", Trim(strCookie)
XMLHTTP.setRequestHeader "User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.77 Safari/537.36"
XMLHTTP.setRequestHeader "Sec-Fetch-Site", "same-origin"
XMLHTTP.setRequestHeader "Sec-Fetch-Mode", "cors"
XMLHTTP.setRequestHeader "Host", "erpprd.abc_company.com"
XMLHTTP.setRequestHeader "Origin", "https://erpprd.abc_company.com"
XMLHTTP.setRequestHeader "Content-Type", "application/xml"
XMLHTTP.setRequestHeader "sec-ch-ua", "Chromium;v=92, Not A;Brand;v=99, Google Chrome;v=92"
XMLHTTP.setRequestHeader "Sec-Fetch-Dest", "empty"
Dim body As String
body = "<params><param>RESPLIST</param>"
    body = body   "<param>HOMEPAGE</param></params>"

XMLHTTP.send (body)

If XMLHTTP.Status <> 200 Then MsgBox "Oops Failed": Exit Sub
Set htmldoc = New MSHTML.HTMLDocument

'htmldoc.body.innerHTML = XMLHTTP.responseText
'Module1.save_htm XMLHTTP.responseText

''looping thorugh dom document to get the dynamic ID's for sending report request

Dim xDoc As MSXML2.DOMDocument60
    Set xDoc = New MSXML2.DOMDocument60
    If Not xDoc.LoadXML(XMLHTTP.responseText) Then
        Err.Raise xDoc.parseError.ErrorCode, , xDoc.parseError.reason
    End If

    Dim list As IXMLDOMNodeList
    Set list = xDoc.SelectNodes("//RESP")

    Dim attr As IXMLDOMAttribute
    Dim node As IXMLDOMNode
    Dim childNode As IXMLDOMNode

For Each node In list
    If (node.HasChildNodes) Then
        For Each childNode In node.ChildNodes
            Debug.Print childNode.BaseName amp; " " amp; childNode.Text
    If childNode.Text = ThisWorkbook.Worksheets(1).Range("A2").Value Then
        ' if find the GL inquiry for that OU then get its id for future response
            
       Dim resp_nam As String, resp_id As String, appl_id As String, secgrp_id As String, mackey_id As String
    
            resp_nam = node.ChildNodes(0).Text
            resp_id = node.ChildNodes(1).Text
            appl_id = node.ChildNodes(2).Text
            secgrp_id = node.ChildNodes(3).Text
            mackey_id = node.ChildNodes(4).Text
        GoTo end_process_getting_id
    End If
        Next childNode
    End If
Next node

end_process_getting_id:

'processing request for that particular item selected by user

URL = "https://erpprd.abc_company.com/OA_HTML/RF.jsp?resp_id=" amp; resp_id amp; "amp;resp_appl_id=" amp; appl_id amp; "amp;security_group_id=0amp;lang_code=US"

XMLHTTP.Open "GET", URL, False
XMLHTTP.send
strCookie = XMLHTTP.getAllResponseHeaders
strCookie = Split(Split(strCookie, "Cookie:")(1), ";")(0)
XMLHTTP.Open "GET", URL, False

XMLHTTP.setRequestHeader "Accept", "text/html,application/xhtml xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9"
XMLHTTP.setRequestHeader "Accept-Encoding", "gzip, deflate, br"
XMLHTTP.setRequestHeader "Accept-Language", "en-US,en;q=0.9"
XMLHTTP.setRequestHeader "Connection", "keep-alive"
XMLHTTP.setRequestHeader "Cookie", Trim(strCookie)
XMLHTTP.setRequestHeader "Host", "erpprd.abc_company.com"
XMLHTTP.setRequestHeader "Referer", WorksheetFunction.EncodeURL("https://abc_company.com/OA_HTML/OA.jsp?page=/oracle/apps/fnd/framework/navigate/webui/HomePGamp;homePage=Yamp;oapc=2")
XMLHTTP.setRequestHeader "sec-ch-ua", "Chromium;v=93, Not A;Brand;v=99, Google Chrome;v=93"
XMLHTTP.setRequestHeader "sec-ch-ua-mobile", "?0"
XMLHTTP.setRequestHeader "sec-ch-ua-platform", "Windows"
XMLHTTP.setRequestHeader "Sec-Fetch-Dest", "document"
XMLHTTP.setRequestHeader "Sec-Fetch-Mode", "Navigate"
XMLHTTP.setRequestHeader "Sec-Fetch-Site", "same-origin"
XMLHTTP.setRequestHeader "Sec-Fetch-User", "?1"
XMLHTTP.setRequestHeader "Upgrade-Insecure-Requests", "1"
XMLHTTP.setRequestHeader "User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.82 Safari/537.36"
XMLHTTP.setRequestHeader "Content-Type", "application/xml"

XMLHTTP.send

If XMLHTTP.Status <> 200 Then MsgBox "Oops Failed": Exit Sub

 

в настоящее время дошло до этой страницы

необходимо заполнить информацию и нажать на кнопку ПЕРЕЙТИ, чтобы сделать форму видимой

после того, как форма станет видимой, необходимо снова отправить этот запрос для отправки отчета. Любая помощь, альтернативные идеи помогут!!!- Спасибо.