1

Тема: AHK: Залогиниться с помощью API сайта

Добрый день! Подскажите пожалуйста, с https://isogd.mos.ru/isogd-portal/home скачиваю два файла "COLOURPASS.xml" и "Паспорт колористического решения.pdf" через поиск по кадастровому номеру, используя Chrome.ahk


....

FormatTime, TimeString_day, , dd.MM.yyyy

IfNotExist, C:\Отчёт\%TimeString_day%
   FileCreateDir, C:\Отчёт\%TimeString_day%
   
folder_end :=  "C:\Отчёт\" TimeString_day 

url := "https://isogd.mos.ru/isogd-portal/login" 
url1 := "https://isogd.mos.ru/isogd-portal/document/searchResult/all"

profile := A_Temp "\ChromeProfile"
if !FileExist(profile)
	FileCreateDir, % profile 

ChromeInst := new Chrome(profile) ; ,, "--headless") 

Page := ChromeInst.GetPage()
Page.Call("Page.navigate", {"url": url}) 
Page.WaitForLoad()

login := ""
pass := ""

kadastr_nomer := "" 

Page.Evaluate("document.querySelector('#login > div:nth-child(3) > input').value = '" login "' ")
Page.Evaluate("document.querySelector('#login > div:nth-child(3) > input').dispatchEvent(new Event('change'))")

Page.Evaluate("document.querySelector('#login > div:nth-child(4) > input').value = '" pass "' ")
Page.Evaluate("document.querySelector('#login > div:nth-child(4) > input').dispatchEvent(new Event('change'))")

Page.Evaluate("document.querySelector('#login > button').click()")

Page.Call("Page.navigate", {"url": url1})
Page.WaitForLoad()

Page.Evaluate("document.querySelector('#header > document-layout-top-nav-bar > div > div > div > div.input-group.input-group-lg.pull-left.search > input').value = '" kadastr_nomer "' ")
Page.Evaluate("document.querySelector('#header > document-layout-top-nav-bar > div > div > div > div.input-group.input-group-lg.pull-left.search > input').dispatchEvent(new Event('change'))")

Page.Evaluate("document.querySelector('#header > document-layout-top-nav-bar > div > div > div > div.input-group.input-group-lg.pull-left.search > span > button > i').click()")

while Page.Evaluate("document.getElementsByClassName('sk-spinner sk-spinner-three-bounce').length").value = 1
{
	sleep 300
	continue
}

nomer_folder := RegExReplace(nomer, ":", ".")
FileCreateDir, % folder_end "\" nomer_folder

fold := % folder_end "\" nomer_folder
Page.Call("Browser.setDownloadBehavior", { behavior : "allow", downloadPath : fold})  
	
	
Page.Evaluate("document.querySelector('#sub-content > ui-view > search-result > div > loading-block > div > div > div > div > div > success > div > div:nth-child(4) > div > div > div > div >  div > doc-table > table > tbody > tr > td:nth-child(1) > a').click()")

while Page.Evaluate("document.getElementsByClassName('sk-spinner sk-spinner-three-bounce').length").value = 1
{
	sleep 300
	continue
}
 
loop % Page.Evaluate("document.getElementsByClassName('file col-lg-12 col-md-12 col-sm-12').length").Value
{
    if InStr(Page.Evaluate("document.getElementsByClassName('file col-lg-12 col-md-12 col-sm-12')[ " A_index " - 1 ].getElementsByClassName('fileName_name')[0].innerText").value, "COLOURPASS")
		Page.Evaluate("document.getElementsByClassName('file col-lg-12 col-md-12 col-sm-12')[ " A_index " - 1 ].getElementsByClassName('fileInfo')[0].getElementsByTagName('span')[1].getElementsByTagName('a')[0].click()")
		
	if InStr(Page.Evaluate("document.getElementsByClassName('file col-lg-12 col-md-12 col-sm-12')[ " A_index " - 1 ].getElementsByClassName('fileName_name')[0].innerText").value, "Паспорт колористического решения") 
		Page.Evaluate("document.getElementsByClassName('file col-lg-12 col-md-12 col-sm-12')[ " A_index " - 1 ].getElementsByClassName('fileInfo')[0].getElementsByTagName('span')[1].getElementsByTagName('a')[0].click()")

}

while FileExist(fold "\*.CRDownload")
	Sleep 30
	   
MsgBox, 262208, , Готово! 

ChromeInst.Kill()
ExitApp

Но возможно это всё можно сделать через API (опыта нету)? но необходимо залогиниться, а где взять параметры логина и пароля ? Когда вручную логинешься, появляется "Request URL: https://isogd.mos.ru/isogd-portal/nsi-api/v1/users/user/smirnov_aa"


username := "smirnov_aa"
password := ""

loginBody := "username=" username "&password=" password 

LoginURL := "https://isogd.mos.ru/isogd-portal/login"

HTTP := ComObjCreate("WinHTTP.WinHttpRequest.5.1")
HTTP.Open("GET", LoginURL) 
HTTP.SetRequestHeader("Content-Type", "application/json; charset=UTF-8")
HTTP.SetRequestHeader("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.128 Safari/537.36")
HTTP.SetRequestHeader("Referer", LoginURL)

HTTP.Send(loginBody)
HTTP.WaitForResponse()
HTTP.ResponseText

MsgBox % HTTP.ResponseText
return

2

Re: AHK: Залогиниться с помощью API сайта

Надо либо изучать апи, либо смотреть, что отправляет броузер и повторять тоже самое через winhttprequest.