|
Компьютерный форум OSzone.net » Компьютеры + Интернет » Хочу все знать » [решено] Отслеживание изменений на сайте |
|
[решено] Отслеживание изменений на сайте
|
Ветеран Сообщения: 1639 |
Всех приветствую!
Имеется банальная задача, но пока решения для неё я не обнаружил. В общем, есть html-страница, на которой n-абзацев с текстом следующего содержания: Цитата:
Я давно использую замечательное ПО - WebSite-Watcher. Но к большому сожалению, с этой задачей программа не справляется... Хотел у Вас спросить, какое ещё ПО можно использовать для решения данной задачи? Спасибо! |
||
Отправлено: 01:10, 12-09-2017 |
Ветеран Сообщения: 1639
|
Профиль | Отправить PM | Цитировать Iska,
Цитата Iska:
Цитата The_Immortal:
Цитата Iska:
Спасибо! |
|||
Последний раз редактировалось The_Immortal, 13-09-2017 в 19:24. Отправлено: 19:18, 13-09-2017 | #11 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Цитата The_Immortal:
Цитата The_Immortal:
Попробуйте для начала WSH: Скрытый текст
Option Explicit Const READYSTATE_COMPLETE = 4 Dim objRegExp Set objRegExp = WScript.CreateObject("VBScript.RegExp") objRegExp.Pattern = "^Число3: (\d+?)$" With WScript.CreateObject("InternetExplorer.Application") .Visible = False .Navigate("http://imm.hldns.ru/") Do WScript.Sleep 100 Loop Until Not .Busy And .ReadyState = READYSTATE_COMPLETE WScript.Echo .document.GetElementByID("div3").innerText If objRegExp.Test(.document.GetElementByID("div3").innerText) Then If Not StrComp(objRegExp.Execute(.document.GetElementByID("div3").innerText).Item(0).Submatches.Item(0), "100", vbTextCompare) = 0 Then WScript.Echo "<> 100" End If Else WScript.Echo "Not found" End If .Quit End With Set objRegExp = Nothing WScript.Quit 0 |
||
Отправлено: 23:23, 13-09-2017 | #12 |
Модератор Сообщения: 8283
|
Профиль | Отправить PM | Цитировать |
Отправлено: 07:31, 14-09-2017 | #13 |
Ветеран Сообщения: 1639
|
Профиль | Отправить PM | Цитировать Iska, огромнейшее Вам спасибо за помощь! Но Вы как в воду глядели по поводу иерархии... Она всё же есть
![]() Теперь же я действительно максимально воссоздал условия. Как видите, html-структура следующая (на примере двух чисел): Скрытый текст
<div class="number"> <div class="num3"> <div class="title"> <h4 class="string">Число3: </h4> </div> <div class="value"> <h5>101</h5> </div> </div> </div> <div class="number"> <div class="num4"> <div class="title"> <h4 class="string">Число4: </h4> </div> <div class="value"> <h5>105</h5> </div> </div> </div> Во-первых, тут классы. Во-вторых, общие классы идентичны (class="number"), как и внутренние . Но есть и третье-положительное: никаких регулярок тут не требуется, т.к. значение сидит изолированно в классе "value". В общем, я попытался вывести нужное значение следующим образом: Option Explicit Const READYSTATE_COMPLETE = 4 Dim list With WScript.CreateObject("InternetExplorer.Application") .Visible = False .Navigate("http://imm.hldns.ru/") Do WScript.Sleep 100 Loop Until Not .Busy And .ReadyState = READYSTATE_COMPLETE list = .document.getElementsByClassName("num3")(0) WScript.Echo list.getElementsByClassName("value")(0).innerText .Quit End With Set objRegExp = Nothing WScript.Quit 0 ![]() |
Последний раз редактировалось The_Immortal, 15-09-2017 в 03:30. Отправлено: 23:45, 14-09-2017 | #14 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Цитата The_Immortal:
|
|
Отправлено: 03:37, 15-09-2017 | #15 |
Ветеран Сообщения: 1639
|
Профиль | Отправить PM | Цитировать Iska, пожалуйста, гляньте своим профессиональным взглядом на этот простейший код:
Option Explicit Const READYSTATE_COMPLETE = 4 Dim list, WshShell With WScript.CreateObject("InternetExplorer.Application") .Visible = False .Navigate("http://imm.hldns.ru/") Do WScript.Sleep 100 Loop Until Not .Busy And .ReadyState = READYSTATE_COMPLETE Set list = .document.getElementsByClassName("num3")(0) set WshShell = WScript.CreateObject("Wscript.Shell") If Not StrComp(list.getElementsByClassName("value")(0).innerText, "100", vbTextCompare) = 0 Then WshShell.Run "c:\mailsend\mailsend -кучавсякихразныпараметров", 0, True End If .Quit End With WScript.Quit 0 А в общем, благодаря Вам задача решена. Я данный скрипт по совету уважаемого Amigos'а запихнул в Планировщик заданий с заданной периодичностью - всё ок. И ещё хотел сказать насчет программки для консольной отправки почты Blat - при её использовании я обнаружил пару минусов:
|
Отправлено: 23:05, 16-09-2017 | #16 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Option Explicit Const READYSTATE_COMPLETE = 4 Dim objHTMLElementCollection, objHTMLElementCollection2 With WScript.CreateObject("InternetExplorer.Application") .Visible = False .Navigate("http://imm.hldns.ru/") Do WScript.Sleep 100 Loop Until Not .Busy And .ReadyState = READYSTATE_COMPLETE Set objHTMLElementCollection = .document.getElementsByClassName("num3") If Not objHTMLElementCollection Is Nothing Then Set objHTMLElementCollection2 = objHTMLElementCollection.item(0).getElementsByClassName("value") If Not objHTMLElementCollection2 Is Nothing Then If Not StrComp(objHTMLElementCollection2.item(0).innerText, "100", vbTextCompare) = 0 Then SendMessage End If Set objHTMLElementCollection2 = Nothing Else WScript.Echo "Can't parse elements with [value] class name." End If Set objHTMLElementCollection = Nothing Else WScript.Echo "Can't parse elements with [num3] class name." End If .Quit End With WScript.Quit 0 Sub SendMessage() Const cdoSendUsingPort = 2 Const cdoBasic = 1 Const strPartSchema = "http://schemas.microsoft.com/cdo/configuration/" With WScript.CreateObject("CDO.Message") With .Configuration.Fields .Item(strPartSchema & "sendusing") = cdoSendUsingPort .Item(strPartSchema & "smtpauthenticate") = cdoBasic .Item(strPartSchema & "smtpserver") = "smtp.mail.ru" .Item(strPartSchema & "smtpserverport") = 465 .Item(strPartSchema & "smtpusessl") = True .Item(strPartSchema & "sendusername") = "login" .Item(strPartSchema & "sendpassword") = "password" .Update End With .To = "to@yandex.ru" .From = "from@mail.ru" .Subject = "Subject" .TextBody = "TextBody" .Send End With End Sub |
Отправлено: 02:59, 17-09-2017 | #17 |
Ветеран Сообщения: 1639
|
Профиль | Отправить PM | Цитировать Iska,
Цитата Iska:
![]() Всё замечательно работает. Дай Вам Бог здоровья! |
|
Отправлено: 03:38, 19-09-2017 | #18 |
Ветеран Сообщения: 1639
|
Профиль | Отправить PM | Цитировать Iska, на одном из ПК с Windows 7 и Office 2013 функция отправки е-мейла не отрабатывает:
Цитата:
![]() Ну оно и логично. Не подскажите, в чем может быть проблема? Я погуглил, но однозначного решения не увидел... Спасибо! |
|
Отправлено: 14:49, 28-09-2017 | #19 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать The_Immortal, не подскажу.
Если Outlook не используется, я бы попробовал удалить этот компонент из установленного комплекта Office и ещё раз попробовал бы установить CDO. Другим вариантом может быть использование объектной модели Microsoft Outlook для создания и отправки письма (мне этот вариант не нравился: не знаю, как в новых версиях, а в старых Outlook «задалбывал» предупреждениями — какая уж там автоматизация). |
Отправлено: 15:03, 28-09-2017 | #20 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Интернет - [решено] Отслеживание изменений на сайте | BelovS | Программное обеспечение Windows | 10 | 04-11-2015 18:45 | |
2010 - Отслеживание изменений на рабочем листе | Quaker_75 | Microsoft Office (Word, Excel, Outlook и т.д.) | 4 | 27-05-2015 13:48 | |
Разное - Программа для поиска информации на сайте | Fist | Программирование и базы данных | 7 | 21-02-2012 00:09 | |
Создание отслеживание заказов на сайте | маруська818 | Вебмастеру | 0 | 14-04-2011 14:37 | |
Переиндексация информации о сайте. | Domashenko Alexey | Вебмастеру | 1 | 28-08-2003 11:15 |
|