Открывайте новые вкладки с одним и тем же URL, с разными командами на каждой вкладке - PullRequest
1 голос
/ 19 мая 2019

Мне нужно зайти на сайт, затем выбрать причину и нажать кнопку.Поскольку у меня есть несколько переменных (причин), мне нужно сделать это несколько раз, чтобы создать отчет для каждой из них.URL-адрес и заголовок веб-страницы совпадают, поскольку веб-страница представляет собой форму.

Пока что я создал этот код:

WB :=  ComObjCreate("InternetExplorer.Application")
WB.Visible:=True

wb.Navigate("http://url")
wb.document.title := "cause 1"

WinMaximize, % "ahk_id " wb.HWND
; Wait for page to load:
While wb.Busy or wb.ReadyState != 4
    Sleep, 100

wb.document.getElementsByName("id_cause")[0].value := 1
wb.document.getElementsByName("btnSearch")[0].Click()

wb.Navigate("http://url", 2048)
wb.document.title := "cause 2"


While wb.Busy or wb.ReadyState != 4
    Sleep, 100

wb.document.getElementsByName("id_cause")[0].value := 2
wb.document.getElementsByName("btnSearch")[0].Click()
return

Как и ожидалось, все командыссылаются на первую вкладку.Итак, первая вкладка переименована в причину 1, а после этого снова переименована в причину 2. При поиске решения в Интернете я видел несколько кодов, которые позволяют пользователю ссылаться на вкладку, но все они используют URL, чтобы различатьвкладки.

Есть ли способ достичь моей цели в этом сценарии (те же URL-адреса)?Я думал о чем-то вроде индексации вкладок или переименовании URL-адресов и использую именование для идентификации.

Один из кодов, которые я нашел в Интернете, это:

navOpenNewForegroundTab = 65536
navOpenInBackgroundTab = 4096
navOpenInNewWindow = 1
navOpenInNewTab = 2048

wb := ComObjCreate("InternetExplorer.Application") ; create a IE instance
IeHwnd := wb.Hwnd
wb.Visible := True
wb.Navigate("Google.com")
While wb.readyState != 4 || wb.document.readyState != "complete" || wb.busy ; wait for the page to load
   Sleep, 10


wb.Navigate("DuckDuckgo.com", navOpenInNewTab)
while !wb2
    wb2 := New_IE("DuckDuckgo.com")
wb2.Navigate("Google.com")
While wb2.readyState != 4 || wb2.document.readyState != "complete" || wb2.busy ; wait for the page to load
   Sleep, 10


wb.Navigate("DuckDuckgo.com", navOpenInNewTab)
while !wb3
    wb3 := New_IE("DuckDuckgo.com")
wb3.Navigate("Google.com")

While wb3.readyState != 4 || wb3.document.readyState != "complete" || wb3.busy ; wait for the page to load
   Sleep, 10

Msgbox then just use wb or wb2 or wb3 to control tab1, tab2 or tab3`n`nFor Example lets look up something in tab 2 now...

Something_to_look_for := "duckduckgo"
wb2.Navigate("Google.com/#q=" Something_to_look_for)
While wb2.readyState != 4 || wb2.document.readyState != "complete" || wb2.busy ; wait for the page to load
   Sleep, 10
return


New_IE(Url) {
    For wb in ComObjCreate("Shell.Application").Windows
    {
        If instr( wb.LocationUrl, URL) && InStr( wb.FullName, "iexplore.exe" )
            return wb
        else
            continue
    }
}

1 Ответ

0 голосов
/ 19 мая 2019

IEGetN () - это функция, которая выдаст вам n-е окно IE с указанным заголовком. Окно уже должно быть открыто.

Вы используете это так:

 wb1 := IEgetN("Google",1)
 wb5 := IEgetN("Google",5)

Вот функция:

IEGetN(name="",_n=1) 
{
    _counter = 1
    IfEqual, Name,, WinGetTitle, Name, ahk_class IEFrame     ;// Get active window if no parameter
    Name := (Name="New Tab - Windows Internet Explorer")? "about:Tabs":RegExReplace(Name, " - (Windows|Microsoft)? ?Internet Explorer$")
    for wb in ComObjCreate("Shell.Application").Windows()
        if wb.LocationName=Name and InStr(wb.FullName, "iexplore.exe")
        {
            if (_counter ==_n)
            {
                return wb 
            }
            _counter += 1
        }
}
...