Что нового

Поиск заданных слов в открывающихся окнах браузеров

Aleksander-2000

Новичок
Сообщения
33
Репутация
0
Версия AutoIt: 3.3.12.0
Описание: Поиск заранее заданных слов в открывающихся страницах браузер(ов)а или документа
Примечания: Скрипт запущен и при открытии страницы браузера проверяет наличие заданных слов,
в случае их наличия, выдаёт сообщение или закрывает окно браузера (в зависимости от предварительной
отметки в чекбоксе о действии - выдать сообщение или закрыть).
 

alex33

Скриптер
Сообщения
1,457
Репутация
186
Можно примерно так.
Код:
#include <IE.au3>

While 1
	_example()
	Sleep(1000)
WEnd

Func _example()
	Local $checkbox = True ; True выдать сообщение, False закрыть браузер
	Local $sText = "искомый текст" ; здесь текст который ищим на странице
	Local $i = 1, $oIE
	While 1
		$oIE = _IEAttach("", "instance", $i)
		If @error = $_IEStatus_NoMatch Then ExitLoop
		If StringInStr(_IEBodyReadHTML($oIE), $sText) > 0 Then
			If $checkbox Then
				MsgBox(0, "Текст найден", "На странице найден заданный текст")
			Else
				_IEQuit($oIE)
			EndIf
		EndIf
		$i += 1
	WEnd
EndFunc   ;==>_example
 
Автор
Aleksander-2000

Aleksander-2000

Новичок
Сообщения
33
Репутация
0
А как выполнять эти же действия, но по отдельным ключевым словам, при наличии хотя бы одного. И ещё, как можно при запуске скрипта, указанные действия выбирать через отметку в чекбоксе, желательно, чтобы этот выбор в дальнейшем сохранялся.
 

alex33

Скриптер
Сообщения
1,457
Репутация
186
Код:
#include <IE.au3>
#include <GUIConstantsEx.au3>
#include <ButtonConstants.au3>

Global $sIniPath = @ScriptDir & "\config.ini"
Global $iRadio1, $iRadio2, $iInput1, $iButton1, $iButton2, $msg, $hGUI
Global $flag = True
$hGUI = GUICreate("настройка")

GUICtrlCreateGroup("Установка параметров", 10, 10, 230, 66)
$iRadio1 = GUICtrlCreateRadio("Закрыть браузер", 20, 25, -1, 20)
If IniRead($sIniPath, "script", "radioChecked", 2) = 1 Then GUICtrlSetState($iRadio1, $GUI_CHECKED)
$iRadio2 = GUICtrlCreateRadio("Выдать сообщение", 20, 45, -1, 20)
If IniRead($sIniPath, "script", "radioChecked", 2) = 2 Then GUICtrlSetState($iRadio2, $GUI_CHECKED)
GUICtrlCreateGroup("", -99, -99, 1, 1)

GUICtrlCreateLabel("Ключевые слова через запятую", 10, 100, 130, 30)
$iInput1 = GUICtrlCreateInput("", 10, 140, 330, 30)
GUICtrlSetData(-1, IniRead($sIniPath, "script", "keywords", ""))
$iButton1 = GUICtrlCreateButton("Запустить", 50, 250, 70, 30)
GUICtrlSetState($iButton1, $GUI_DEFBUTTON)
$iButton2 = GUICtrlCreateButton("Остановить", 140, 250, 70, 30)
GUICtrlSetState($iButton2, $GUI_DISABLE)

GUISetState()

While 1
	$msg = GUIGetMsg()
	Switch $msg
		Case $GUI_EVENT_CLOSE
			ExitLoop
		Case $iButton1
			If BitAND(GUICtrlRead($iRadio1), $GUI_CHECKED) = $GUI_CHECKED Then
				$flag = False
				IniWrite($sIniPath, "script", "radioChecked", 1)
			ElseIf BitAND(GUICtrlRead($iRadio2), $GUI_CHECKED) = $GUI_CHECKED Then
				$flag = True
				IniWrite($sIniPath, "script", "radioChecked", 2)
			Else
				MsgBox(0, "Выберите действие", "Необходимо выбрать действие при обноружении ключевых слов", 0, $hGUI)
				ContinueLoop
			EndIf
			If StringLen(GUICtrlRead($iInput1)) < 3 Then
				MsgBox(0, "Введите ключевые слова для поиска", "Вы не ввели ключевые слова", 0, $hGUI)
				GUICtrlSetState($iInput1, $GUI_FOCUS)
				ContinueLoop
			EndIf
			IniWrite($sIniPath, "script", "keywords", GUICtrlRead($iInput1))
			AdlibRegister("_example", 1000)
			GUICtrlSetState($iButton2, $GUI_ENABLE)
			GUICtrlSetState($iButton2, $GUI_FOCUS)
			GUICtrlSetState($iInput1, $GUI_DISABLE)
			GUICtrlSetState($iButton1, $GUI_DISABLE)
			GUICtrlSetState($iRadio1, $GUI_DISABLE)
			GUICtrlSetState($iRadio2, $GUI_DISABLE)
		Case $iButton2
			AdlibUnRegister("_example")
			GUICtrlSetState($iInput1, $GUI_ENABLE)
			GUICtrlSetState($iButton1, $GUI_ENABLE)
			GUICtrlSetState($iButton1, $GUI_FOCUS)
			GUICtrlSetState($iButton2, $GUI_DISABLE)
			GUICtrlSetState($iRadio1, $GUI_ENABLE)
			GUICtrlSetState($iRadio2, $GUI_ENABLE)
	EndSwitch
WEnd

Func _example()
	Local $sText, $aKeywords
	Local $i, $oIE
	$aKeywords = StringSplit(GUICtrlRead($iInput1), ",")
	If Not IsArray($aKeywords) Then Return
	For $k = 1 To $aKeywords[0]
		$sText = StringStripWS($aKeywords[$k], 1 + 2)
		$i = 1
		While 1
			$oIE = _IEAttach("", "instance", $i)
			If @error = $_IEStatus_NoMatch Then ExitLoop
			If StringInStr(_IEBodyReadHTML($oIE), $sText) > 0 Then
				If $flag Then
					MsgBox(0, "Текст найден", "На странице найден заданный текст", 0, $hGUI)
				Else
					_IEQuit($oIE)
				EndIf
			EndIf
			$i += 1
		WEnd
	Next
EndFunc   ;==>_example
 
Автор
Aleksander-2000

Aleksander-2000

Новичок
Сообщения
33
Репутация
0
Аlex33 класс! А как сделать, чтобы настройки выбора действия также сохранялись и при следующем запуске скрипта это окно не появлялось, а действовали установленные параметры. А кроме того, чтобы в окне не было поля введения для слов и кнопки "запустить" и "остановить", только "применить" при установлении параметров (как на скриншоте, конечно же с соответствующей высотой окна). Сами же нужные слова просто вписывать прямо в файл ini, открывая его "вручную".


Добавлено:
Сообщение автоматически объединено:

Да и ещё, можно ли сделать так, чтобы при нахождении слов, выдаваемое сообщение имела две кнопки, одна из которых "Игнорировать" для приостановки скрипта, и продолжение его работы, только при переходе на другую страницу.
 

Вложения

  • Scrin.png
    Scrin.png
    19 КБ · Просмотры: 24

alex33

Скриптер
Сообщения
1,457
Репутация
186
Примерно так. Правда я не проверял...
Код:
#include <IE.au3>
#include <GUIConstantsEx.au3>
#include <ButtonConstants.au3>

Global $sIniPath = @ScriptDir & "\config.ini"
Global $iRadio1, $iRadio2, $iButton1, $msg, $hGUI
Global $flag = True
If IniRead($sIniPath, "script", "UseGUI", 1) = 1 Then
	$hGUI = GUICreate("настройка")

	GUICtrlCreateGroup("Установка параметров", 10, 10, 230, 66)
	$iRadio1 = GUICtrlCreateRadio("Закрыть браузер", 20, 25, -1, 20)
	If IniRead($sIniPath, "script", "radioChecked", 2) = 1 Then GUICtrlSetState($iRadio1, $GUI_CHECKED)
	$iRadio2 = GUICtrlCreateRadio("Выдать сообщение", 20, 45, -1, 20)
	If IniRead($sIniPath, "script", "radioChecked", 2) = 2 Then GUICtrlSetState($iRadio2, $GUI_CHECKED)
	GUICtrlCreateGroup("", -99, -99, 1, 1)

	$iButton1 = GUICtrlCreateButton("Применить", 50, 250, 70, 30)
	GUICtrlSetState($iButton1, $GUI_DEFBUTTON)

	GUISetState(@SW_SHOW)
EndIf

If IniRead($sIniPath, "script", "UseGUI", 1) = 1 Then
	While 1
		$msg = GUIGetMsg()
		Switch $msg
			Case $GUI_EVENT_CLOSE
				ExitLoop
			Case $iButton1
				If BitAND(GUICtrlRead($iRadio1), $GUI_CHECKED) = $GUI_CHECKED Then
					$flag = False
					IniWrite($sIniPath, "script", "radioChecked", 1)
				ElseIf BitAND(GUICtrlRead($iRadio2), $GUI_CHECKED) = $GUI_CHECKED Then
					$flag = True
					IniWrite($sIniPath, "script", "radioChecked", 2)
				Else
					MsgBox(0, "Выберите действие", "Необходимо выбрать действие при обноружении ключевых слов", 0, $hGUI)
					ContinueLoop
				EndIf
				AdlibRegister("_example", 1000)
				GUICtrlSetState($iButton1, $GUI_DISABLE)
				GUICtrlSetState($iRadio1, $GUI_DISABLE)
				GUICtrlSetState($iRadio2, $GUI_DISABLE)
				IniWrite($sIniPath, "script", "UseGUI", 0)
				GUISetState(@SW_HIDE)
		EndSwitch
	WEnd
Else
	If IniRead($sIniPath, "script", "radioChecked", 2) = 1 Then
		$flag = False
	ElseIf IniRead($sIniPath, "script", "radioChecked", 2) = 2 Then
		$flag = True
	EndIf
	AdlibRegister("_example", 1000)
	While 2
		Sleep(1000)
	WEnd
EndIf

Func _example()
	Local $sText, $aKeywords
	Local $i, $oIE
	$aKeywords = StringSplit(IniRead($sIniPath, "script", "keywords", ""), ",")
	If Not IsArray($aKeywords) Then Return
	For $k = 1 To $aKeywords[0]
		$sText = StringStripWS($aKeywords[$k], 1 + 2)
		$i = 1
		While 1
			$oIE = _IEAttach("", "instance", $i)
			If @error = $_IEStatus_NoMatch Then ExitLoop
			If StringInStr(_IEBodyReadHTML($oIE), $sText) > 0 Then
				If $flag Then
					If MsgBox(4, "Текст найден", "На странице найден заданный текст. Поставить скрипт на паузу?", 0, $hGUI) = 6 Then
						$sUrl = _IEPropertyGet($oIE, "locationurl")
						AdlibUnRegister("_example")
						Do
							Sleep(1000)
						Until $sUrl <> _IEPropertyGet($oIE, "locationurl")
						AdlibRegister("_example", 1000)
					EndIf
				Else
					_IEQuit($oIE)
				EndIf
			EndIf
			$i += 1
		WEnd
	Next
EndFunc   ;==>_example
 
Автор
Aleksander-2000

Aleksander-2000

Новичок
Сообщения
33
Репутация
0
Всё так как надо, единственно, при переходе на другую страницу скрипт с паузы не убирается, т.е. не реагирует на слова, это можно как-то исправить?
 
Автор
Aleksander-2000

Aleksander-2000

Новичок
Сообщения
33
Репутация
0
Сейчас ещё раз попробую.


Добавлено:
Сообщение автоматически объединено:

Извиняюсь, действительно сейчас работает. До этого возможно у меня было открыто слишком много окон. Большое спасибо за помощь. Не могу разобрать, как ставить +1?


Добавлено:
Сообщение автоматически объединено:

В чём причина не пойму, но опять не сработало. У меня открываюся окна вкладками, до этого пробывал сработало, сейчас делаю тоже самое - нет. Скрипт работает в активном окне?
 
Автор
Aleksander-2000

Aleksander-2000

Новичок
Сообщения
33
Репутация
0
Сейчас открываю новыми окнами, опять не срабатывает в новом окне, если в поисковик ввожу слово и открываю результаты. Возвращаюсь к вкладкам, где срабатывало до этого, вписываю другое слово – срабатывает, следующее по списку - срабатывает. Перехожу на другую вкладку, где также срабатывало, ввожу эти же слова – работает, но в третьей вкладке, ввожу все эти слова не рабатает, но зато срабатывает новое слово.


Добавлено:
Сообщение автоматически объединено:

Не срабатывает в новых окнах, если например, ввёл слово в поисковик, скрипт сработал, я его приостановил, открываю из найденного в новом окне, скрипт остаётся приостановленным, а надо, чтобы реагировал на новое окно…
 

alex33

Скриптер
Сообщения
1,457
Репутация
186
Вот... Только этот вариант почему-то не работает, хотя по логике должен. Пока незнаю как его снимать с паузы, может быть потом додумаюсь... :smile:
Код:
;Opt("TrayIconDebug", 1)
#include <IE.au3>
#include <GUIConstantsEx.au3>
#include <ButtonConstants.au3>

Global $sIniPath = @ScriptDir & "\config.ini"
Global $iRadio1, $iRadio2, $iButton1, $msg, $hGUI
Global $flag = True
If IniRead($sIniPath, "script", "UseGUI", 1) = 1 Then
	$hGUI = GUICreate("настройка")

	GUICtrlCreateGroup("Установка параметров", 10, 10, 230, 66)
	$iRadio1 = GUICtrlCreateRadio("Закрыть браузер", 20, 25, -1, 20)
	If IniRead($sIniPath, "script", "radioChecked", 2) = 1 Then GUICtrlSetState($iRadio1, $GUI_CHECKED)
	$iRadio2 = GUICtrlCreateRadio("Выдать сообщение", 20, 45, -1, 20)
	If IniRead($sIniPath, "script", "radioChecked", 2) = 2 Then GUICtrlSetState($iRadio2, $GUI_CHECKED)
	GUICtrlCreateGroup("", -99, -99, 1, 1)

	$iButton1 = GUICtrlCreateButton("Применить", 50, 250, 70, 30)
	GUICtrlSetState($iButton1, $GUI_DEFBUTTON)

	GUISetState(@SW_SHOW)
EndIf

If IniRead($sIniPath, "script", "UseGUI", 1) = 1 Then
	While 1
		$msg = GUIGetMsg()
		Switch $msg
			Case $GUI_EVENT_CLOSE
				ExitLoop
			Case $iButton1
				If BitAND(GUICtrlRead($iRadio1), $GUI_CHECKED) = $GUI_CHECKED Then
					$flag = False
					IniWrite($sIniPath, "script", "radioChecked", 1)
				ElseIf BitAND(GUICtrlRead($iRadio2), $GUI_CHECKED) = $GUI_CHECKED Then
					$flag = True
					IniWrite($sIniPath, "script", "radioChecked", 2)
				Else
					MsgBox(0, "Выберите действие", "Необходимо выбрать действие при обноружении ключевых слов", 0, $hGUI)
					ContinueLoop
				EndIf
				AdlibRegister("_example", 1000)
				GUICtrlSetState($iButton1, $GUI_DISABLE)
				GUICtrlSetState($iRadio1, $GUI_DISABLE)
				GUICtrlSetState($iRadio2, $GUI_DISABLE)
				IniWrite($sIniPath, "script", "UseGUI", 0)
				IniWrite($sIniPath, "script", "keywords", "")
				GUISetState(@SW_HIDE)
		EndSwitch
	WEnd
Else
	If IniRead($sIniPath, "script", "radioChecked", 2) = 1 Then
		$flag = False
	ElseIf IniRead($sIniPath, "script", "radioChecked", 2) = 2 Then
		$flag = True
	EndIf
	AdlibRegister("_example", 1000)
	While 2
		Sleep(1000)
	WEnd
EndIf

Func _example()
	Local $sText, $aKeywords
	Local $i, $oIE
	$aKeywords = StringSplit(IniRead($sIniPath, "script", "keywords", ""), ",")
	If Not IsArray($aKeywords) Then Return
	For $k = 1 To $aKeywords[0]
		$sText = StringStripWS($aKeywords[$k], 1 + 2)
		$i = 1
		While 1
			$oIE = _IEAttach("", "instance", $i)
			If @error = $_IEStatus_NoMatch Then ExitLoop
			If StringInStr(_IEBodyReadHTML($oIE), $sText) > 0 Then
				If $flag Then
					If MsgBox(4, "Текст найден", "На странице найден заданный текст. Поставить скрипт на паузу?", 0, $hGUI) = 6 Then
						$sUrl = _IEPropertyGet($oIE, "locationurl")
						AdlibUnRegister("_example")
						Do
							Sleep(1000)
						Until $sUrl <> _IEPropertyGet($oIE, "locationurl") Or _check($i, $sText) = True
						AdlibRegister("_example", 1000)
					EndIf
				Else
					_IEQuit($oIE)
				EndIf
			EndIf
			$i += 1
		WEnd
	Next
EndFunc   ;==>_example

Func _check($c_i, $c_text)
	Local $ii, $oIE
	$ii = 1
	While 1
		If $c_i = $ii Then ContinueLoop
		$oIE = _IEAttach("", "instance", $ii)
		If @error = $_IEStatus_NoMatch Then ExitLoop
		If StringInStr(_IEBodyReadHTML($oIE), $c_text) > 0 Then
			Return True
		EndIf
		$ii += 1
	WEnd
EndFunc   ;==>_check
 
Автор
Aleksander-2000

Aleksander-2000

Новичок
Сообщения
33
Репутация
0
Сам я двигался вот в таком направлении:
Код:
#include <DDEML.au3>
#include <DDEMLClient.au3>
While 1
Sleep(3000)
WinExists("[CLASS:IEFrame]")
  $TEXT1=ControlGetText("[CLASS:IEFrame]","","[CLASS:Edit;INSTANCE:1]")
$Text=$TEXT1
If StringInStr($Text, "https://mail.ru/") or StringInStr($Text, "google") or StringInStr($Text, "rambler") Then
MsgBox(4096, "Заголовок", "Слова найдены", 10)
$hData = _DDEMLClient_Execute("IExplore", "WWW_Exit", "WWW_Exit")
Else
EndIf
$Text2 = BinaryToString(InetRead($TEXT1, 1), 4)
If StringInStr($Text2, "Апельсин") or StringInStr($Text2, "Лимон") or StringInStr($Text2, "Киви") Then
MsgBox(4096, "Заголовок", "Слова найдены", 10)
$hData = _DDEMLClient_Execute("IExplore", "WWW_Exit", "WWW_Exit")
Else
EndIf
WEnd

Но, кроме того, что это "топорная" работа, у неё есть минус - нет выбора, хотя отдельно я могу сделать и выдавать сообщение и закрывать браузер или вкладку. Но в этом варианте скрипт реагирует на любую вкладку и окно, кроме того он блокирует и заданные в адресной строке слова, что мне тоже нужно. Опять же минус на него реагирует Касперский, хотя и не «громко», а этого не желательно – смущает. Безусловно, Ваш вариант мне подходит наилучшим образом. Посмотрите мой код, возможно наведёт на какие-то мысли…
 
Верх