1 (изменено: jbn238, 2023-01-12 03:36:37)

Тема: AHK: Открывать страницу по номеру

Доброго времени!
Помогите с решением, я ввожу число 19, после на этой странице https://tennisabstract.com/reports/wtaRankings.html
под номером 19 стоит "Liudmila Samsonova", вот её и должна открывать программа, как такое реализовать? То есть, я просто в InputBox пишу число 19, и мне сразу открывает страницу https://www.tennisabstract.com/cgi-bin/ … aSamsonova, и так же с остальными номерами, помогите пожалуйста.

2

Re: AHK: Открывать страницу по номеру

jbn238, точку опять потеряли. Дать ссылку на правила?

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

3

Re: AHK: Открывать страницу по номеру

teadrinker
Не нужно, спасибо). Поможете с решением?

4

Re: AHK: Открывать страницу по номеру

Легко. Посылаете http-запрос, получаете html, там вся таблица. Остаётся распарсить.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

5

Re: AHK: Открывать страницу по номеру

teadrinker
Это да, я сам думал так, сама проблема как распарсить, чтобы всё было коректно?


UrlDownloadToFile, https://tennisabstract.com/reports/wtaRankings.html, 0.txt
InputBox, num, Номер,,, 200, 120
RegExMatch 

На моменте "RegExMatch " начинается основная проблема.

6

Re: AHK: Открывать страницу по номеру

Если есть базовые знания по веб-разработке, можно создать документ из html и распарсить джаваскриптом.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

7

Re: AHK: Открывать страницу по номеру

jbn238


#NoEnv
SetBatchLines, -1
#SingleInstance force


url := "https://tennisabstract.com/reports/wtaRankings.html"
inputbox, position, , , ,100 ,100,, , , , ***


HTTP := ComObjCreate("WinHTTP.WinHttpRequest.5.1")
HTTP.Open("GET", url)
HTTP.SetRequestHeader("User-Agent", "Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.102 Safari/537.36")
HTTP.Send()
HTTP.WaitForResponse()

body := HTTP.ResponseBody
pdata := NumGet(ComObjValue(body) + 8 + A_PtrSize)
length := body.MaxIndex() - body.MinIndex() + 1
text := StrGet(pdata, length, "cp1251")
html := ComObjCreate("HTMLFile")
html.write(text)

loop, % html.getElementsByTagName("tbody")[3].getElementsByTagName("tr").length
{
   if(position = html.getElementsByTagName("tbody")[3].getElementsByTagName("tr")[A_index - 1].getElementsByTagName("td")[0].innerText)
   {
      run, % html.getElementsByTagName("tbody")[3].getElementsByTagName("tr")[A_index - 1].getElementsByTagName("td")[1].getElementsByTagName("a")[0].getAttribute("href")
      break
   }
}
ExitApp

8

Re: AHK: Открывать страницу по номеру

inseption86
Спасибо большое, то что нужно!

9

Re: AHK: Открывать страницу по номеру

Можно попроще:

url := "https://tennisabstract.com/reports/wtaRankings.html"
inputbox, position,,,, 100, 100,,,,, 1

html := WebRequest(url,,,, error)
if error
   throw error
document := DocumentFromHtml(html)
links := document.querySelectorAll("table#reportable tr td[align=""left""] > a")

Loop % links.Length {
   link := links[A_Index - 1]
   if (A_Index = position)
      Run % link.href
}

WebRequest(url, method := "GET", HeadersArray := "", body := "", ByRef error := "") {
   Whr := ComObjCreate("WinHttp.WinHttpRequest.5.1")
   Whr.Open(method, url, true)
   for name, value in HeadersArray
      Whr.SetRequestHeader(name, value)
   Whr.Send(body)
   Whr.WaitForResponse()
   status := Whr.status
   if (status != 200)
      error := "HttpRequest error, status: " . status
   Arr := Whr.responseBody
   pData := NumGet(ComObjValue(Arr) + 8 + A_PtrSize)
   length := Arr.MaxIndex() + 1
   Return StrGet(pData, length, "UTF-8")
}

DocumentFromHtml(html, mode := 9) {
   document := ComObjCreate("HTMLFILE")
   document.write("<meta http-equiv=""X-UA-Compatible"" content=""IE=" . mode . """>")
   document.write(html)
   Return document
}
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

10

Re: AHK: Открывать страницу по номеру

teadrinker
Если честно, оба варианты для меня не понятны, но большое спасибо за помощь, работоспособность это главное, а понимание кода уже можно отложить).

11 (изменено: jbn238, 2023-01-13 02:02:42)

Re: AHK: Открывать страницу по номеру

teadrinker
А ещё вот такой вопрос, когда открыло страницу с нужным игроком, снизу есть таблица https://prnt.sc/fikGj0IeO3w6, то что красным нужно в чтобы выводило в Gui, но для этого нужно чтобы эти данные принимались в переменные, как это лучше сделать, я когда-то подобное делал через RegExMatch, загружал html, и там по ключевым словам находил нужные данные, тут так же выйдет?

+ открыть спойлер

Это наверное как второй вопрос можно расценивать, но это же один функционал программы, поэтому написал сюда).

Ссылка на таблицу если надо вдруг.
https://www.tennisabstract.com/cgi-bin/ … r-splits-h

12

Re: AHK: Открывать страницу по номеру

jbn238 пишет:

я когда-то подобное делал через RegExMatch, загружал html, и там по ключевым словам находил нужные данные, тут так же выйдет?

Попробуйте, почему нет. Но не всегда данные можно получить таким способом, часть данных иногда подгружается уже после загрузки страницы, так что в исходном html их может не быть.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder