1

Тема: AHK: Загрузить часть HTML страницы

Здравствуйте.

Помогите разобраться.

Нужно загружать не целую страницу, а только часть, например первые 300 строк или 2кб.

Использовал:


size := HTTPRequest( Url, data, Response_Headers := "User-Agent:Mozilla/5.0 (Windows NT 6.2; WOW64; rv:18.0) Gecko/20100101 Firefox/18.0 ", "" ) 

но она загружает страничку целиком

Еще видел такую функцию http://msdn.microsoft.com/en-us/library/d4cek6cc, но не знаю как ее прикрутить в AHK

2 (изменено: Lexanni, 2012-12-23 15:04:37)

Re: AHK: Загрузить часть HTML страницы

Приветствую!
У меня тоже есть вопрос близкий к теме.
Подскажите пожалуйста, можно ли, зная URL страницы, подгрузить в переменную только ее заголовок (title)?

3

Re: AHK: Загрузить часть HTML страницы

Только загрузив сначала всю страницу:

text := UrlDownloadToVar("http://forum.script-coding.com/")
MsgBox, % RegExReplace(text, ".*<title>(.*)</title>.*", "$1")

UrlDownloadToVar(URL, UserAgent = "")
{
   WebRequest := ComObjCreate("WinHttp.WinHttpRequest.5.1")
   WebRequest.Open("GET", Url)
   UserAgent ? WebRequest.Option(WinHttpRequestOption_UserAgentString := 0) := UserAgent
   WebRequest.Send()
   Text := WebRequest.ResponseText
   WebRequest := ""
   return Text
}
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Skype dmitry_fiveg

4 (изменено: Lexanni, 2012-12-23 19:00:33)

Re: AHK: Загрузить часть HTML страницы

Большое спасибо!
Как только начал пробовать, то понял, что что-то не то с шаблоном — с другими сайтами он не хотел работать. В итоге разобрался: всему виной то, что код главной страницы этого сайта записан в одну строку, что встречается не часто… Обычно код страниц записан в несколько строк, потому, универсальный шаблон выглядит так:

MsgBox, % RegExReplace(text, ".*is)<title>(.*)</title>.*", "$1")

5

Re: AHK: Загрузить часть HTML страницы

Скорей уж так:

MsgBox, % RegExReplace(text, "is).*<title>(.*)</title>.*", "$1")
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Skype dmitry_fiveg

6

Re: AHK: Загрузить часть HTML страницы

Точно! У себя написал верно, а тут накосячил…

7

Re: AHK: Загрузить часть HTML страницы

Доброго времени суток.
А можно ли скопировать определённый текст в переменную? Допустим с сайта - "http://horoscopes.rambler.ru/" скопировать именно текст с гороскопом.

8

Re: AHK: Загрузить часть HTML страницы

http://www.autohotkey.com/board/topic/6 … -a-string/

9

Re: AHK: Загрузить часть HTML страницы

А можно на Русском и поподробней?

10

Re: AHK: Загрузить часть HTML страницы

text := UrlDownloadToVar("http://horoscopes.rambler.ru/")
Msgbox % trim(StringBetween( text, "<div style=""text-align:justify; //padding-right: 30px; "">`n", "<br>" ))


StringBetween( String, NeedleStart, NeedleEnd="" ) {
    StringGetPos, pos, String, % NeedleStart
    If ( ErrorLevel )
         Return ""
    StringTrimLeft, String, String, pos + StrLen( NeedleStart )
    If ( NeedleEnd = "" )
        Return String
    StringGetPos, pos, String, % NeedleEnd
    If ( ErrorLevel )
        Return ""
    StringLeft, String, String, pos
    Return String
}

UrlDownloadToVar(URL, UserAgent = "")
{
   WebRequest := ComObjCreate("WinHttp.WinHttpRequest.5.1")
   WebRequest.Open("GET", Url)
   UserAgent ? WebRequest.Option(WinHttpRequestOption_UserAgentString := 0) := UserAgent
   WebRequest.Send()
   Text := WebRequest.ResponseText
   WebRequest := ""
   return Text
}

11

Re: AHK: Загрузить часть HTML страницы

Большое спасибо.

12 (изменено: serzh82saratov, 2013-07-08 13:02:33)

Re: AHK: Загрузить часть HTML страницы


StringBetween( Str, NS, NE) {
    Return RegExMatch(Str, "i)\Q" NS "\E(.*?)\Q" NE "\E", Res) ? Res1 : ""
}

или:


StringBetween( Str, NS, NE = "" ) {
    NE := NE = "" ? "$" : "\Q" NE "\E"
    Return RegExMatch(Str, "i)\Q" NS "\E(.*?)" NE, Res) ? Res1 : ""
}

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

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru
Win10x64, AutoHotkey_L v1.1.30.03 (Unicode 32-bit). AhkSpy, Hotkey, ClockGui

13

Re: AHK: Загрузить часть HTML страницы

Возможно сверху изменить название окна на другое, а не на название скрипта?

14

Re: AHK: Загрузить часть HTML страницы

Доброго времени суток дорогие друзья.
Никак не получается сделать задуманное,прошу помочь.
Вот скрипт:
--------------------------
text := UrlDownloadToVar("http://vk.com/vk637890/")
Msgbox % trim(StringBetween( text,  "Никак не пойму какие имено теги нужно вставить сюда что бы всё работало..." ))


StringBetween( Str, NS, NE = "" ) {
    NE := NE = "" ? "$" : "\Q" NE "\E"
    Return RegExMatch(Str, "i)\Q" NS "\E(.*?)" NE, Res) ? Res1 : ""
}

UrlDownloadToVar(URL, UserAgent = "")
{
   WebRequest := ComObjCreate("WinHttp.WinHttpRequest.5.1")
   WebRequest.Open("GET", Url)
   UserAgent ? WebRequest.Option(WinHttpRequestOption_UserAgentString := 0) := UserAgent
   WebRequest.Send()
   Text := WebRequest.ResponseText
   WebRequest := ""
   return Text
}
-----------------------

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

15 (изменено: Irbis, 2013-07-30 11:26:34)

Re: AHK: Загрузить часть HTML страницы

Gabe_#33, оформление [code]текст_программы[/code] придумано не просто так, наверное?
Сравни свой пост с предыдущими.

addr := "http://vk.com/ivandemidovpoker"
text := UrlDownloadToVar(addr)
Msgbox % StringBetween( text, "id=""profile_time_lv"" class=""fl_r"">", "<")
       . StringBetween( text, "id=""profile_online_lv"" class=""fl_r"">", "<")
       . StringBetween( text, "<div class=""profile_deleted_text"">", "<")
Return

StringBetween( Str, NS, NE = "" ) {
    NE := NE = "" ? "$" : "\Q" NE "\E"
    Return RegExMatch(Str, "i)\Q" NS "\E(.*?)" NE, Res) ? Res1 : ""
}

UrlDownloadToVar(URL, UserAgent = "")
{
   WebRequest := ComObjCreate("WinHttp.WinHttpRequest.5.1")
   WebRequest.Open("GET", Url)
   UserAgent ? WebRequest.Option(WinHttpRequestOption_UserAgentString := 0) := UserAgent
   WebRequest.Send()
   Text := WebRequest.ResponseText
   WebRequest := ""
   return Text
}

16

Re: AHK: Загрузить часть HTML страницы

`(document:=ComObjCreate("HTMLFile")).write(URLDownloadToVar("http://vk.com/vk637890"))
nodesCount:=(node:=document.querySelector("h1[id=title]")).childNodes.length

MsgBox, 262144, % A_Space
      , % node.children[nodesCount=3 ? 1:2].childNodes.item(0).data ":`n"
      .   node.children[nodesCount=3 ? 0:1].childNodes.item(0).data

URLDownloadToVar(url)
{
  `(webRequest:=ComObjCreate("WinHttp.WinHttpRequest.5.1")).open("GET", url, False)
   webRequest.send()
   Return, webRequest.responseText, webRequest:=""
}

17

Re: AHK: Загрузить часть HTML страницы

Grey, все чудесно, только  как быть с защищенными страницами, т.е. скрытых от просмотра анонимусами? Твой скрипт показывает для них лишь ":", лучше хоть какую-то информацию вывести.

18

Re: AHK: Загрузить часть HTML страницы

Irbis пишет:

...лучше хоть какую-то информацию вывести.

Ну в общем я посчитал это не критичным, можно конечно вывести:

`(document:=ComObjCreate("HTMLFile")).write(URLDownloadToVar("http://vk.com/vk637890"))
nodesCount:=(node:=document.querySelector("h1[id=title]")).childNodes.length
person:=nodesCount~="^(3|5)$" ? node.children[nodesCount=3 ? 1:2].childNodes.item(0).data
                         . "" : LTrim(node.childNodes.item(0).data)
state:=nodesCount~="^(3|5)$" ? node.children[nodesCount=3 ? 0:1].childNodes.item(0).data
                        . "" : "no data (hidden page)"
MsgBox, 262144, % A_Space, % person ":`n"state ;, % 1.5

URLDownloadToVar(url)
{
  `(webRequest:=ComObjCreate("WinHttp.WinHttpRequest.5.1")).open("GET", url, False)
   webRequest.send()
   Return, webRequest.responseText, webRequest:=""
}
Irbis пишет:

...как быть с защищенными страницами...?

Ну если нет "узлов" с информацией, то ни как, другое дело если есть аккаунт, то можно посмотреть как-то так:

baseURL:="http://vk.com", target:="http://vk.com/vk637890"
, (document:=ComObjCreate("HTMLFile")).write(URLDownloadToVar(target))

nodesCount:=(node:=document.querySelector("h1[id=title]")).childNodes.length

If nodesCount~="^(3|5)$"
   MsgBox, 262144, % "variation#1"
         , % node.children[nodesCount=3 ? 1:2].childNodes.item(0).data ":`n"
         .   node.children[nodesCount=3 ? 0:1].childNodes.item(0).data
Else
{
   document:="", (oIE:=ComObjCreate("InternetExplorer.Application")).navigate(baseURL)

   While, oIE.readyState<>4
      Sleep, 250

   oIE.document.forms[0]["quick_email"].value:="login"
   oIE.document.forms[0]["quick_pass"].value:="pass"
   oIE.document.querySelector("button[id=quick_login_button]").click()

   Sleep, 500
   oIE.navigate(target)
   While, oIE.readyState<>4
      Sleep, 250

   nodesCount:=(node:=oIE.document.querySelector("h1[id=title]")).childNodes.length
   MsgBox, 262144, % "variation#2"
         , % LTrim(node.childNodes.item(3).data)":`n"
         .   node.children[nodesCount=3 ? 0:1].childNodes.item(0).data
   oIE.document.querySelector("a[id=logout_link]").click()

   Sleep, 500
   oIE.quit
}

URLDownloadToVar(url)
{
  `(webRequest:=ComObjCreate("WinHttp.WinHttpRequest.5.1")).open("GET", url, False)
   webRequest.send()
   Return, webRequest.responseText, webRequest:=""
}

Скрытый аккаунт моего друга был всегда в "оффлайне", так что проверить до конца мне не удалось.

19

Re: AHK: Загрузить часть HTML страницы

Ну нифига себе сколько всего!=)
Ребят спасибо большое за информацию и за помошь.
Да и,извиняюсь за не правильно оформленный пост.

20 (изменено: Irbis, 2013-07-31 14:55:36)

Re: AHK: Загрузить часть HTML страницы

Grey пишет:

Скрытый аккаунт моего друга был всегда в "оффлайне", так что проверить до конца мне не удалось.

Для скрытых оффлайн контактов время последнего входа показывает, но для онлайн контактов выдает ошибку. (

+ Показать

http://savepic.org/4234756.png

Upd: Оказывается, еще в памяти наплодилась куча процессов iexplore.exe с заголовками, соответствующими проверенным страницам, прибил через Task Manager. Видимо, это тот случай, когда скрипт не доходил до строки oIE.quit

21 (изменено: Malcev, 2014-05-02 17:40:33)

Re: AHK: Загрузить часть HTML страницы

serzh82saratov, Ваша функция не всегда срабатывает.
Возьмем к примеру данную страницу форума.
Возвращается пустое значение.
Хотя если я поставлю на нижний код таг code, а не quote, то возвращает уже значение.
В чем может быть причина?

text := UrlDownloadToVar("http://forum.script-coding.com/viewtopic.php?pid=82557#p82557")
Msgbox % StringBetween( text, "Доброго времени суток дорогие друзья.", "только  как быть с защище")


StringBetween( Str, NS, NE) {
    Return RegExMatch(Str, "i)\Q" NS "\E(.*?)\Q" NE "\E", Res) ? Res1 : ""
}
UrlDownloadToVar(URL, UserAgent = "")
{
   WebRequest := ComObjCreate("WinHttp.WinHttpRequest.5.1")
   WebRequest.Open("GET", Url)
   UserAgent ? WebRequest.Option(WinHttpRequestOption_UserAgentString := 0) := UserAgent
   WebRequest.Send()
   Text := WebRequest.ResponseText
   WebRequest := ""
   return Text
}

22

Re: AHK: Загрузить часть HTML страницы

Ну так там всякие &nbsp; и.т.д. ResponseText возвращает. Если нужен только текст, почему не пользовать метод InnerText от Shell.Explorer?
И что Вы здесь хотите вернуть?

Msgbox % StringBetween( text, "Доброго времени суток дорогие друзья.", "только  как быть с защище")
По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru
Win10x64, AutoHotkey_L v1.1.30.03 (Unicode 32-bit). AhkSpy, Hotkey, ClockGui

23

Re: AHK: Загрузить часть HTML страницы

Хочу вернуть код страницы для парсинга между этими двумя фразами.

24

Re: AHK: Загрузить часть HTML страницы

Вернётся

", "

зачем оно нужно?

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru
Win10x64, AutoHotkey_L v1.1.30.03 (Unicode 32-bit). AhkSpy, Hotkey, ClockGui

25 (изменено: Malcev, 2014-05-02 18:45:54)

Re: AHK: Загрузить часть HTML страницы

Почему?
Должно вернуть и сейчас возвращатся:

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

Никак не получается сделать задуманное,прошу помочь.<br>Вот скрипт:<br>--------------------------<br>text := UrlDownloadToVar("http://vk.com/vk637890/")<br>Msgbox % trim(StringBetween( text,&nbsp; <strong>"Никак не пойму какие имено теги нужно вставить сюда что бы всё работало..."</strong> ))</p><br><p>StringBetween( Str, NS, NE = "" ) {<br>&nbsp; &nbsp; NE := NE = "" ? "$" : "\Q" NE "\E"<br>&nbsp; &nbsp; Return RegExMatch(Str, "i)\Q" NS "\E(.*?)" NE, Res) ? Res1 : ""<br>}</p><p>UrlDownloadToVar(URL, UserAgent = "")<br>{<br>&nbsp; &nbsp;WebRequest := ComObjCreate("WinHttp.WinHttpRequest.5.1")<br>&nbsp; &nbsp;WebRequest.Open("GET", Url)<br>&nbsp; &nbsp;UserAgent ? WebRequest.Option(WinHttpRequestOption_UserAgentString := 0) := UserAgent<br>&nbsp; &nbsp;WebRequest.Send()<br>&nbsp; &nbsp;Text := WebRequest.ResponseText<br>&nbsp; &nbsp;WebRequest := ""<br>&nbsp; &nbsp;return Text<br>}<br>-----------------------</p><p>Нужно что бы вылезало окно с текстом - "Online" или "заходил вчера во столько то..."<br>Пробовал вставлять разные теги,в итоге открывается окно с кучей "html" кода либо пустота...</p>
</div>
</div>
</div>
<div class="postfoot">
<div class="post-options">
<p class="post-actions"><span class="report-post first-item"><a href="http://forum.script-coding.com/misc.php?report=74099">Сообщить модератору<span> Сообщение 14</span></a></span> <span class="quote-post"><a href="http://forum.script-coding.com/post.php?tid=7892&amp;qid=74099">Цитировать<span> Сообщение 14</span></a></span></p>
</div>
</div>
</div>
<div class="post odd replypost">
<div id="p74103" class="posthead">
<h3 class="hn post-ident"><span class="post-num">15</span> <span class="post-byline"><span>Ответ от </span><a title="Перейти в профиль пользователя Irbis" href="http://forum.script-coding.com/profile.php?id=27384">Irbis</a></span> <span class="post-link"><a class="permalink" rel="bookmark" title="Постоянная ссылка на это сообщение" href="http://forum.script-coding.com/viewtopic.php?pid=74103#p74103">2013-07-30 08:45:47</a></span> <span class="post-edit">Отредактировано Irbis (2013-07-30 10:26:34)</span></h3>
</div>
<div class="postbody">
<div class="post-author">
<ul class="author-ident">
<li class="username"><a title="Перейти в профиль пользователя Irbis" href="http://forum.script-coding.com/profile.php?id=27384">Irbis</a></li>
<li class="usertitle"><span>Разработчик</span></li>
<li class="userstatus"><span>Неактивен</span></li>
</ul>
<ul class="author-info">

</ul>
</div>
<div class="post-entry">
<h4 id="pc74103" class="entry-title hn">Re: AHK: Загрузить часть HTML страницы</h4>
<div class="entry-content">
<p><strong>Gabe_#33</strong>, оформление [<em>code</em>]<span style="color: grey">текст_программы</span>[<em>/code</em>] придумано не просто так, наверное?<br>Сравни свой пост с предыдущими.<br></p><div class="codebox"><pre><code>addr := "http://vk.com/ivandemidovpoker"
text := UrlDownloadToVar(addr)
Msgbox % StringBetween( text, "id=""profile_time_lv"" class=""fl_r""&gt;", "&lt;")
       . StringBetween( text, "id=""profile_online_lv"" class=""fl_r""&gt;", "&lt;")
       . StringBetween( text, "&lt;div class=""profile_deleted_text""&gt;", "&lt;")
Return

StringBetween( Str, NS, NE = "" ) {
    NE := NE = "" ? "$" : "\Q" NE "\E"
    Return RegExMatch(Str, "i)\Q" NS "\E(.*?)" NE, Res) ? Res1 : ""
}

UrlDownloadToVar(URL, UserAgent = "")
{
   WebRequest := ComObjCreate("WinHttp.WinHttpRequest.5.1")
   WebRequest.Open("GET", Url)
   UserAgent ? WebRequest.Option(WinHttpRequestOption_UserAgentString := 0) := UserAgent
   WebRequest.Send()
   Text := WebRequest.ResponseText
   WebRequest := ""
   return Text
}</code></pre></div>
<div class="sig-content"><span class="sig-line"><!-- --></span><a href="http://i076.radikal.ru/0911/08/f04a37cf687b.jpg"><span style="color: White">Feci quod potui faciant meliora potentes</span></a></div>
</div>
</div>
</div>
<div class="postfoot">
<div class="post-options">
<p class="post-actions"><span class="report-post first-item"><a href="http://forum.script-coding.com/misc.php?report=74103">Сообщить модератору<span> Сообщение 15</span></a></span> <span class="quote-post"><a href="http://forum.script-coding.com/post.php?tid=7892&amp;qid=74103">Цитировать<span> Сообщение 15</span></a></span></p>
</div>
</div>
</div>
<div class="post even replypost">
<div id="p74105" class="posthead">
<h3 class="hn post-ident"><span class="post-num">16</span> <span class="post-byline"><span>Ответ от </span><a title="Перейти в профиль пользователя Grey" href="http://forum.script-coding.com/profile.php?id=25792">Grey</a></span> <span class="post-link"><a class="permalink" rel="bookmark" title="Постоянная ссылка на это сообщение" href="http://forum.script-coding.com/viewtopic.php?pid=74105#p74105">2013-07-30 10:43:54</a></span></h3>
</div>
<div class="postbody">
<div class="post-author">
<ul class="author-ident">
<li class="username"><a title="Перейти в профиль пользователя Grey" href="http://forum.script-coding.com/profile.php?id=25792">Grey</a></li>
<li class="usertitle"><span>Разработчик</span></li>
<li class="userstatus"><span>Неактивен</span></li>
</ul>
<ul class="author-info">

</ul>
</div>
<div class="post-entry">
<h4 id="pc74105" class="entry-title hn">Re: AHK: Загрузить часть HTML страницы</h4>
<div class="entry-content">
<div class="codebox"><pre><code>`(document:=ComObjCreate("HTMLFile")).write(URLDownloadToVar("http://vk.com/vk637890"))
nodesCount:=(node:=document.querySelector("h1[id=title]")).childNodes.length

MsgBox, 262144, % A_Space
      , % node.children[nodesCount=3 ? 1:2].childNodes.item(0).data ":`n"
      .   node.children[nodesCount=3 ? 0:1].childNodes.item(0).data

URLDownloadToVar(url)
{
  `(webRequest:=ComObjCreate("WinHttp.WinHttpRequest.5.1")).open("GET", url, False)
   webRequest.send()
   Return, webRequest.responseText, webRequest:=""
}</code></pre></div>
</div>
</div>
</div>
<div class="postfoot">
<div class="post-options">
<p class="post-actions"><span class="report-post first-item"><a href="http://forum.script-coding.com/misc.php?report=74105">Сообщить модератору<span> Сообщение 16</span></a></span> <span class="quote-post"><a href="http://forum.script-coding.com/post.php?tid=7892&amp;qid=74105">Цитировать<span> Сообщение 16</span></a></span></p>
</div>
</div>
</div>
<div class="post odd replypost">
<div id="p74107" class="posthead">
<h3 class="hn post-ident"><span class="post-num">17</span> <span class="post-byline"><span>Ответ от </span><a title="Перейти в профиль пользователя Irbis" href="http://forum.script-coding.com/profile.php?id=27384">Irbis</a></span> <span class="post-link"><a class="permalink" rel="bookmark" title="Постоянная ссылка на это сообщение" href="http://forum.script-coding.com/viewtopic.php?pid=74107#p74107">2013-07-30 11:14:10</a></span></h3>
</div>
<div class="postbody">
<div class="post-author">
<ul class="author-ident">
<li class="username"><a title="Перейти в профиль пользователя Irbis" href="http://forum.script-coding.com/profile.php?id=27384">Irbis</a></li>
<li class="usertitle"><span>Разработчик</span></li>
<li class="userstatus"><span>Неактивен</span></li>
</ul>
<ul class="author-info">

</ul>
</div>
<div class="post-entry">
<h4 id="pc74107" class="entry-title hn">Re: AHK: Загрузить часть HTML страницы</h4>
<div class="entry-content">
<p>

26

Re: AHK: Загрузить часть HTML страницы

Вот вам еще один пример:

    text := UrlDownloadToVar("http://forum.script-coding.com/viewtopic.php?id=9556")
    Msgbox % StringBetween( text, "Как заменить данную комбинацию?", "Вы можете использовать:")

    StringBetween( Str, NS, NE) {
        Return RegExMatch(Str, "i)\Q" NS "\E(.*?)\Q" NE "\E", Res) ? Res1 : ""
    }
    UrlDownloadToVar(URL, UserAgent = "")
    {
       WebRequest := ComObjCreate("WinHttp.WinHttpRequest.5.1")
       WebRequest.Open("GET", Url)
       UserAgent ? WebRequest.Option(WinHttpRequestOption_UserAgentString := 0) := UserAgent
       WebRequest.Send()
       Text := WebRequest.ResponseText
       WebRequest := ""
       return Text
    }

27

Re: AHK: Загрузить часть HTML страницы

Побойтесь бога, спрячьте всё под спойлер.

Должно вернуть и сейчас возвращатся:

Я по другому пробовал, ну да ладно. Так в чём проблема?

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru
Win10x64, AutoHotkey_L v1.1.30.03 (Unicode 32-bit). AhkSpy, Hotkey, ClockGui

28

Re: AHK: Загрузить часть HTML страницы

Проблема описана в 26 сообщении.

29

Re: AHK: Загрузить часть HTML страницы

 
Вот вам еще один пример:

И это всё описание?

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru
Win10x64, AutoHotkey_L v1.1.30.03 (Unicode 32-bit). AhkSpy, Hotkey, ClockGui

30 (изменено: Malcev, 2014-05-02 19:04:56)

Re: AHK: Загрузить часть HTML страницы

Сложно отловить данный баг.
Предыдущий пост не рассматривайте, так как причина была в том, что данные слова показываются только залогиненному пользователю.

31

Re: AHK: Загрузить часть HTML страницы

Так вы хоть смотрите что оно вам возвращает, там ведь нет sergeiplugatyr, поясните пожалуйста, а там: <p><strong>sergeiplugatyr</strong>, поясните пожалуйста.


URL = http://forum.script-coding.com/viewtopic.php?id=9381&p=2
Gui, Add, ActiveX, Hidden voIE, Shell.Explorer   
 
oIE.navigate(URL), IEBusy(oIE)  
Clipboard := text := oIE.document.body.innerHTML
Msgbox % StringBetween( text, "А как быть если у HTML элемента", ", поясните пожалуйста")

StringBetween(Str, NS, NE) {
    If (P1 := InStr( Str, NS, 1)) && (P2 := InStr( Str, NE, 1, P1+StrLen(NS)))
        Return SubStr(Str, P1+StrLen(NS), P2)
    Return ""
}

IEBusy(O)  {  
    While !(O.readyState=4 && O.document.readyState="complete" && !O.busy)
        Sleep, 50
} 
По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru
Win10x64, AutoHotkey_L v1.1.30.03 (Unicode 32-bit). AhkSpy, Hotkey, ClockGui

32

Re: AHK: Загрузить часть HTML страницы

Пасчёт регекспа, не знаю, почему то не работает.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru
Win10x64, AutoHotkey_L v1.1.30.03 (Unicode 32-bit). AhkSpy, Hotkey, ClockGui

33 (изменено: Malcev, 2014-05-02 19:20:46)

Re: AHK: Загрузить часть HTML страницы

А где именно не работает?
У меня почему-то везде работает.
То есть вы советуете использовать

StringBetween(Str, NS, NE) {
    If (P1 := InStr( Str, NS, 1)) && (P2 := InStr( Str, NE, 1, P1+StrLen(NS)))
        Return SubStr(Str, P1+StrLen(NS), P2)
    Return ""
}

вместо

    StringBetween( Str, NS, NE) {
        Return RegExMatch(Str, "i)\Q" NS "\E(.*?)\Q" NE "\E", Res) ? Res1 : ""
    }

34

Re: AHK: Загрузить часть HTML страницы

В 31 у меня почему то RegEx не работает.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru
Win10x64, AutoHotkey_L v1.1.30.03 (Unicode 32-bit). AhkSpy, Hotkey, ClockGui

35

Re: AHK: Загрузить часть HTML страницы

А нет, что то не так копировалось, работает.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru
Win10x64, AutoHotkey_L v1.1.30.03 (Unicode 32-bit). AhkSpy, Hotkey, ClockGui

36

Re: AHK: Загрузить часть HTML страницы

А у меня перестало.
Все-таки ненадежный способ с  RegEx.

37

Re: AHK: Загрузить часть HTML страницы

Значит не показалось. Ну тогда пользуйте:


StringBetween(Str, NS, NE) {
    If (P1 := InStr( Str, NS, 1)) && (P2 := InStr( Str, NE, 1, P1+StrLen(NS)))
        Return SubStr(Str, P1+StrLen(NS), P2) 
}

функционал тот же, и проще.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru
Win10x64, AutoHotkey_L v1.1.30.03 (Unicode 32-bit). AhkSpy, Hotkey, ClockGui

38

Re: AHK: Загрузить часть HTML страницы

Спасибо!

39 (изменено: Malcev, 2014-05-21 00:23:11)

Re: AHK: Загрузить часть HTML страницы

Последний код глючит:

a = wewr, fdfdgf, *adsd, bsdgfs, csdgfs, xdfgfdh,
b = *adsd,
c = *adsd, asad
msgbox % StringBetween(a, "*", ",")
msgbox % StringBetween(b, "*", ",")
msgbox % StringBetween(c, "*", ",")

StringBetween(Str, NS, NE) {
    If (P1 := InStr( Str, NS, 1)) && (P2 := InStr( Str, NE, 1, P1+StrLen(NS)))
        Return SubStr(Str, P1+StrLen(NS), P2) 
}

40

Re: AHK: Загрузить часть HTML страницы

Так должно быть?


a = wewr, fdfdgf, *adsd, bsdgfs, csdgfs, xdfgfdh,
b = *adsd,
c = *adsd, asad
msgbox % StringBetween(a, "*", ",")
msgbox % StringBetween(b, "*", ",")
msgbox % StringBetween(c, "*", ",")

StringBetween(Str, NS, NE) {  
    If (P1 := InStr(Str, NS, 1)) && (P2 := InStr(Str, NE, 1, P1 + StrLen(NS))-1)
        Return SubStr(Str, P1 + StrLen(NS), P2-P1) 
}
По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru
Win10x64, AutoHotkey_L v1.1.30.03 (Unicode 32-bit). AhkSpy, Hotkey, ClockGui

41 (изменено: Malcev, 2014-05-21 01:25:24)

Re: AHK: Загрузить часть HTML страницы

В этом примере да.
А в этом нет - вмещает в себя последние слова

URL = http://forum.script-coding.com/viewtopic.php?id=9381&p=2
Gui, Add, ActiveX, Hidden voIE, Shell.Explorer   
 
oIE.navigate(URL), IEBusy(oIE)  
Clipboard := text := oIE.document.body.innerHTML
Msgbox % StringBetween( text, "А как быть если у HTML элемента", ", поясните пожалуйста")

StringBetween(Str, NS, NE) {  
    If (P1 := InStr(Str, NS, 1)) && (P2 := InStr(Str, NE, 1, P1 + StrLen(NS))-1)
        Return SubStr(Str, P1 + StrLen(NS), P2-P1) 
}

IEBusy(O)  {  
    While !(O.readyState=4 && O.document.readyState="complete" && !O.busy)
        Sleep, 50
} 

42 (изменено: serzh82saratov, 2014-05-21 01:30:02)

Re: AHK: Загрузить часть HTML страницы


StringBetween(Str, NS, NE) {  
    NSLen := StrLen(NS)
    If (P1 := InStr(Str, NS, 1)+NSLen) && (P2 := InStr(Str, NE, 1, P1+NSLen))
        Return SubStr(Str, P1, P2-P1) 
}
По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru
Win10x64, AutoHotkey_L v1.1.30.03 (Unicode 32-bit). AhkSpy, Hotkey, ClockGui

43

Re: AHK: Загрузить часть HTML страницы

Сейчас все ок.
Спасибо!

44 (изменено: serzh82saratov, 2014-06-02 23:30:35)

Re: AHK: Загрузить часть HTML страницы

Нет, опять не правильно.


StringBetween(Str, NS, NE) { 
    If (P1:=InStr(Str, NS, 1)) && (P2:=InStr(Str, NE, 1, P1+=StrLen(NS))) 
        Return SubStr(Str, P1, P2-P1)
} 

Тут на выходе должно быть "1", тот  вариант ошибётся

a = wewr, fdfdgf, **1, bsdgfs, csdgfs, xdfgfdh,
msgbox % StringBetween(a, "**", ",")

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru
Win10x64, AutoHotkey_L v1.1.30.03 (Unicode 32-bit). AhkSpy, Hotkey, ClockGui

45 (изменено: serzh82saratov, 2014-07-26 23:09:34)

Re: AHK: Загрузить часть HTML страницы

Ну и лучше наверное использовать WinHttpRequest.


url = http://forum.script-coding.com/viewtopic.php?id=9381&p=2
req := ComObjCreate("WinHttp.WinHttpRequest.5.1") 
req.open("GET", url), req.send()
text := req.responseText, req := ""

Msgbox % StringBetween(text, "А как быть если у HTML элемента", ", поясните пожалуйста")

StringBetween(Str, NS, NE) { 
    If (P1:=InStr(Str, NS, 1)) && (P2:=InStr(Str, NE, 1, P1+=StrLen(NS)))
        Return SubStr(Str, P1, P2-P1) 
} 
По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru
Win10x64, AutoHotkey_L v1.1.30.03 (Unicode 32-bit). AhkSpy, Hotkey, ClockGui

46

Re: AHK: Загрузить часть HTML страницы

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

47 (изменено: serzh82saratov, 2014-05-21 02:22:53)

Re: AHK: Загрузить часть HTML страницы

Тут хороший пример, но для допиливания под себя, если честно, для меня тоже мало понятен.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru
Win10x64, AutoHotkey_L v1.1.30.03 (Unicode 32-bit). AhkSpy, Hotkey, ClockGui

48 (изменено: Malcev, 2014-05-21 02:25:54)

Re: AHK: Загрузить часть HTML страницы

Я так и не понял, как с помощью него залогиниться на данном форуме.
А уважаемый Xameleon так и не ответил.

49

Re: AHK: Загрузить часть HTML страницы

Malcev, доброго дня. Прошу прощения за задержку. В работе урылся. )

C JavaScript на АНК лень переписывать. Уверен, вы разберётесь. )


// Создание объекта для формирования запросов по HTTP протоколу
var httpRequest = new ActiveXObject("WinHttp.WinHttpRequest.5.1")

// Загружаем страницу входа
var oHtmlDoc = documentFromURL("http://forum.script-coding.com/login.php")

// Получаем форму авторизации
var form = oHtmlDoc.forms(0)

// Заполняем поля
form("req_username").value = "username"
form("req_password").value = "password"

// Эмулируем отправку
emulateFormSubmit(form)

// Загружаем тело документа
oHtmlDoc = documentFromHTML(httpRequest.responseText)

// Выводим статус авторизации
WScript.Echo(oHtmlDoc.parentWindow.welcome.innerText)

// Загрузка документа с URL
function documentFromURL(url){
    // Инициализация запроса
    httpRequest.open("GET",url,false)
    // Отправка запроса
    httpRequest.send()
    // Построение документа из полученного HTML кода
    var oHtmlDoc = documentFromHTML(httpRequest.responseText)
    // Добавляем тэг base, чтобы относительные ссылки стали абсолютными
    var oBaseTag = oHtmlDoc.createElement("base")
    oBaseTag.href = url
    oHtmlDoc.all.tags("head")(0).appendChild(oBaseTag)
    return oHtmlDoc
}

// Функция создания документа из HTML кода
function documentFromHTML(HtmlCode){
    // Создание парсера HTML кода
    var oHtmlDoc = new ActiveXObject("htmlfile");
    // Отключение выполнения скриптов в документе
    oHtmlDoc.designMode = "on";
    // Добавка кода в документ
    oHtmlDoc.open("text/html");
    oHtmlDoc.write(HtmlCode);
    oHtmlDoc.close();
    // Предотвращаем загрузку внешних ресурсов (объектов / картинок и т.п)
    oHtmlDoc.execCommand("stop");
    return oHtmlDoc
}

// Функция отправки формы
function emulateFormSubmit(form) {
    // Определяем метод передачи данных формы
    switch (form.method) {
        case "post": // Если форма передаётся POST-ом
            // Поддерживается только метод "application/x-www-form-urlencoded"
            if (form.enctype != "application/x-www-form-urlencoded") {
                throw new Error("Error ! Unsupported enctype !");
            }
            // Сборка тела запроса
            var varBody = buildVarBody(form.elements);
            // Отправка запроса
            httpRequest.open("POST", form.action, false);
            httpRequest.setRequestHeader("Content-Type", form.enctype);
            httpRequest.send(varBody);
            break
        case "get": // Если форма передаётся GET-ом
            // Сборка тела запроса
            var varBody = buildVarBody(form.elements);
            // к action (URL) формы добавляем тело запроса
            var url = form.action
            var i = url.lastIndexOf("?")
            if (i >= 0) url = url.slice(0, i)
            if (varBody != "") url += "?" + varBody
            httpRequest.open("GET", url, false);
            httpRequest.send()
            break
        default:
            throw new Error("Error ! Unsupported request method [" + form.method  + "] !");
    }
    return false
}

// Функция сборки полей из элементов формы
function buildVarBody(elements) {
    var varBody = ""
    for (var i = 0; i < elements.length; i++) {
        element = form.elements(i);
        if (element.name != '') {
            varBody += encodeURIComponent(element.name) + "=" + encodeURIComponent(element.value) + "&";
        }
    }
    varBody = varBody.substr(varBody, varBody.length - 1);
    return varBody
}
Передумал переделывать мир. Пашет и так, ну и ладно. Сделаю лучше свой !

50

Re: AHK: Загрузить часть HTML страницы

Возникла проблема с функцией

UrlDownloadToVar(URL, UserAgent = "")
{
   WebRequest := ComObjCreate("WinHttp.WinHttpRequest.5.1")
   WebRequest.Open("GET", Url)
   UserAgent ? WebRequest.Option(WinHttpRequestOption_UserAgentString := 0) := UserAgent
   WebRequest.Send()
   Text := WebRequest.ResponseText
   WebRequest := ""
   Return Text
}

Если прерывается соединение то процесс останавливается и вылетает окно, "Время истекло", и вопрос продолжить или нет, и приходится рукой нажать да, что бы процесс продолжился..
Вопрос такой, можно ли блокировать все всплывающие окна, и принудительно продолжать выполнение скрипта?

51

Re: AHK: Загрузить часть HTML страницы

ComObjError(false)

52

Re: AHK: Загрузить часть HTML страницы

Как получить например в первой StringBetween, 3 подходящее значение, а во втором 10 подходящее, где-то прописать Loop, 3 ? И где добавить перенос строки ( 'n ) и свой текст во 2 и 3 StringBetween ?

addr := "https://www.mobiasbanca.md/"
text := UrlDownloadToVar(addr)
addr2 := "http://www.victoriabank.md/index.php"
text2 := UrlDownloadToVar(addr2)
addr3 :=
text3 :=
Msgbox, % " Mobiasbanca - " StringBetween( text, "RUB</td><td class=""buy"">", "<")
          . StringBetween( text2, "<td align=""right"">", "<")
          . StringBetween( text3, "<"">", "<")
Return

StringBetween( Str, NS, NE = "" ) {
    NE := NE = "" ? "$" : "\Q" NE "\E"
    Return RegExMatch(Str, "i)\Q" NS "\E(.*?)" NE, Res) ? Res1 : ""
}

UrlDownloadToVar(URL, UserAgent = "")
{
   WebRequest := ComObjCreate("WinHttp.WinHttpRequest.5.1")
   WebRequest.Open("GET", Url)
   UserAgent ? WebRequest.Option(WinHttpRequestOption_UserAgentString := 0) := UserAgent
   WebRequest.Send()
   Text := WebRequest.ResponseText
   WebRequest := ""
   return Text
}

53

Re: AHK: Загрузить часть HTML страницы

Непонятно, что вы конкретно хотите получить.

54 (изменено: nuts, 2016-02-15 17:41:41)

Re: AHK: Загрузить часть HTML страницы

Malcev пишет:

Непонятно, что вы конкретно хотите получить.

На первой странице https://www.mobiasbanca.md/   под

StringBetween( text, "RUB</td><td class=""buy"">", "<") 

подходят 3 значения

RUB</td><td class="buy">0.2510</td>
RUB</td><td class="buy">0.2505</td>
RUB</td><td class="buy">0.2450</td>

С первой страницы мне нужно получить третье значение, а не первое, то-есть Msgbox мне выдает 0.2510, а мне нужно 0.2450.
Так же и со второй ,

StringBetween( text2, "<td align=""right"">", "<")
<td align="right">19.810</td>
<td align="right">20.170</td>
<td align="right">22.150</td>
<td align="right">22.670</td>
<td align="right">0.247</td>
<td align="right">0.260</td>

и так далеее... нужно получить 21 значение, цифры каждый день меняются. Это курс валют.

55

Re: AHK: Загрузить часть HTML страницы

nuts, ссылку и код необходимо оформить тегами url и code!

56 (изменено: Malcev, 2016-02-15 19:09:38)

Re: AHK: Загрузить часть HTML страницы

addr := "https://www.mobiasbanca.md/"
text := UrlDownloadToVar(addr)

Msgbox, % "1ый повтор: " StringBetween( text, "RUB</td><td class=""buy"">", "<", 1) 
. "`n2ой повтор: " StringBetween( text, "RUB</td><td class=""buy"">", "<", 2)
. "`n3ий повтор: " StringBetween( text, "RUB</td><td class=""buy"">", "<", 3)
Return

StringBetween( Str, NS, NE := "", N := 1) {
   NE := NE = "" ? "$" : "\Q" NE "\E"
   Return RegExMatch(Str, "is)(?:\Q" NS "\E(.*?)" NE ".*?){" N "}", Res) ? Res1 : ""
}

UrlDownloadToVar(URL, UserAgent = "")
{
   WebRequest := ComObjCreate("WinHttp.WinHttpRequest.5.1")
   WebRequest.Open("GET", Url)
   UserAgent ? WebRequest.Option(WinHttpRequestOption_UserAgentString := 0) := UserAgent
   WebRequest.Send()
   Text := WebRequest.ResponseText
   WebRequest := ""
   return Text
}

57

Re: AHK: Загрузить часть HTML страницы

Malcev отлично, то что надо, + в репу

58 (изменено: nuts, 2016-07-25 20:41:06)

Re: AHK: Загрузить часть HTML страницы

Можно как-то начало и конец строки чтобы считывались с переменной ??

Примерно что-то типа этого

a1 := %clipboard%
a2 := <
StringBetween( text, "a1", "a2", 1)

59

Re: AHK: Загрузить часть HTML страницы

a1 := clipboard
a2 := "<"
StringBetween( text, a1, a2, 1)

60 (изменено: MrRutts, 2018-03-05 14:15:19)

Re: AHK: Загрузить часть HTML страницы

Добрый день!

Почему не срабатывает код:

text := UrlDownloadToVar("https://binomo.com/ru/trading")
Msgbox % RegExReplace(text, <span class="currency-amount ng-binding" ng-bind="vm.amount$ | async:this">, " </span>" )

UrlDownloadToVar(URL, UserAgent = "")
{
   WebRequest := ComObjCreate("WinHttp.WinHttpRequest.5.1")
   WebRequest.Open("GET", Url)
   UserAgent ? WebRequest.Option(WinHttpRequestOption_UserAgentString := 0) := UserAgent
   WebRequest.Send()
   Text := WebRequest.ResponseText
   WebRequest := ""
   return Text
}

Должен принять число :

<span class="currency-amount ng-binding" ng-bind="vm.amount$ | async:this">1 068,94 </span>