Что нового

[Функция] _IEForm_Inspector - Инспектор веб-форм

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
Знаю, есть много хороших инструментов для веб разработчиков (сам пользуюсь консолью Chrome).
Но на форуме частенько попадаются вопросы по поводу нахождения id, name, value, index`а элементов форм.
Это и побудило меня написать несложную функцию _IEForm_Inspector, которая выводит отчёт по всем элементам форм.
Пользоваться ей очень просто.

Пример.
Код:
;~ Example 1
;~ Запись отчёта в консоль (скрытые элементы выводятся)

#include <IE.au3>

$oIE = _IECreate("http://autoitscript.com")
$sOut = _IEForm_Inspector($oIE)
If @extended Then
	ShellExecute("notepad.exe", $sOut, @WindowsDir, "open")
Else
	ConsoleWrite($sOut)
EndIf

;~ Example 2
;~ Запись отчёта в файл 'odnoklasniki_ru.log' (скрытые элементы не выводятся)

#include <IE.au3>

$oIE = _IECreate("http://odnoklasniki.ru")
$sOut = _IEForm_Inspector($oIE, @ScriptDir, 1)
If @extended Then
	ShellExecute("notepad.exe", $sOut, @WindowsDir, "open")
Else
	ConsoleWrite($sOut)
EndIf


Функция
Код:
; #FUNCTION# ====================================================================================================================
; language ......: en_EN
; Name...........: _IEForm_Inspector
; Description....: The function parses the form on a Web Site
; Syntax.........: _IEForm_Inspector( $h_Obj [$s_Path, [$i_Hidden]])
; Parameters.....: $h_Obj 			- IWebBrowser2 Interface
; 				   $s_Path			- The path to write a report to a file.
;				   $i_Hidden		- Show hidden form elements 1 - yes / 0 - (default) no
; Return values..: Success - Returns a report in text format (the output of the report depends on the parameter $ s_Path)
;                  Failure - None
; Author.........: Garrett
; Modified.......: None
; Remarks........: @extended - A pointer to the creation of log file 1 - yes / 0 - no
; Related........: None
; Link...........: None
; Example........: Yes
; ===============================================================================================================================
#Region Russian Annotation
; #FUNCTION# ====================================================================================================================
; language ......: ru_RU
; Name...........: _IEForm_Inspector
; Description....: Функция анализирует формы на странице веб сайта
; Syntax.........: _IEForm_Inspector( $h_Obj [$s_Path, [$i_Hidden]])
; Parameters.....: $h_Obj 			- Интерфейс IWebBrowser2
; 				   $s_Path			- Путь для записи отчёта в файл.
;				   $i_Hidden		- Показать скрытые элементы форм 1 - да / 0 - (default) нет
; Return values..: Success - Возвращает отчёт в текстовом виде (вывод отчёта зависит от параметра $s_Path)
;                  Failure - None
; Author.........: Garrett
; Modified.......: None
; Remarks........: @extended - Указатель на создание log файла 1 - да / 0 - нет
; Related........: None
; Link...........: None
; Example........: Yes
; ===============================================================================================================================
#EndRegion Russian Annotation
Func _IEForm_Inspector($h_Obj, $s_Path = "", $i_Hidden = 0)
	Local $s_AppTitle = "Inspector web forms"
	Local $s_Version = "1.0"
	Local $i = 0, $ii = 0, $iii = 0, $s_TextOut = "", $a_Forms[1][5]
	Local $s_URL = _IEPropertyGet($h_Obj, "locationurl")
	
	$o_Forms = _IEFormGetCollection($h_Obj)
	$i_AllForms = @extended
	$s_TextOut &= "; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" & @CRLF
	$s_TextOut &= "; " & @CRLF
	$s_TextOut &= "; " & @TAB & "Отчёт по сайту " & $s_URL & @CRLF
	$s_TextOut &= "; " & @CRLF
	$s_TextOut &= "; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" & @CRLF
	$s_TextOut &= @CRLF
	$s_TextOut &= @TAB & "; Всего найдено форм: " & $i_AllForms & @CRLF
	$s_TextOut &= @CRLF

	For $o_Form in $o_Forms
		
		$s_TextOut &= "; Форма: #" & $i+1 & @CRLF & @CRLF
		$s_TextOut &= $o_Form.tagName & @TAB & "[index -> " & $i & "]" & @CRLF
		If $o_Form.id <> "" Then $s_TextOut &= @TAB & "[id -> " & $o_Form.id & "]" & @CRLF
		If $o_Form.name <> "" Then $s_TextOut &= @TAB & "[name -> " & $o_Form.name & "]" & @CRLF
		$s_TextOut &= @CRLF
		
		$o_Elements = _IEFormElementGetCollection($o_Form)
		$s_TextOut &= @TAB & "; Элементов в форме: " & @extended & @CRLF & @CRLF
		
		For $o_Element in $o_Elements
			
			If $i_Hidden And $o_Element.type = "hidden" Then
				$s_TextOut &= @TAB & "( " & $o_Element.tagName & " ) " & @CRLF
				$s_TextOut &= @TAB & "[index -> " & $iii & "]" & @CRLF
				$s_TextOut &= @TAB & "; Элемент скрыт" & @CRLF
				$s_TextOut &= @CRLF
			Else
				
				If $o_Element.tagName <> "select" Then
					
					$s_TextOut &= @TAB & "( " & $o_Element.tagName & " ) " & @CRLF
					$s_TextOut &= @TAB & "[index -> " & $iii & "]" & @CRLF
					
					If $o_Element.type <> "" Then $s_TextOut &= @TAB & "[type -> " & $o_Element.type & "]" & @CRLF
					If $o_Element.id <> "" Then $s_TextOut &= @TAB & "[id -> " & $o_Element.id & "]" & @CRLF
					If $o_Element.name <> "" Then $s_TextOut &= @TAB & "[name -> " & $o_Element.name & "]" & @CRLF
					If $o_Element.tagName <> "object" And $o_Element.value <> "" Then $s_TextOut &= @TAB & "[value -> " & $o_Element.value & "]" & @CRLF
					$s_TextOut &= @CRLF
				
				Else
				
					$s_TextOut &= @TAB & "( " & $o_Element.tagName & " ) " & @CRLF
					$s_TextOut &= @TAB & "[index -> " & $iii & "]" & @CRLF
					If $o_Element.type <> "" Then $s_TextOut &= @TAB & "[type -> " & $o_Element.type & "]" & @CRLF
					If $o_Element.id <> "" Then $s_TextOut &= @TAB & "[id -> " & $o_Element.id & "]" & @CRLF
					If $o_Element.name <> "" Then $s_TextOut &= @TAB & "[name -> " & $o_Element.name & "]" & @CRLF
					If $o_Element.value <> "" Then $s_TextOut &= @TAB & "[value -> " & $o_Element.value & "]"  & @CRLF

					For $s = 0 To $o_Element.options.length -1
						If $o_Element.options.selectedIndex = $s Then 
							$s_TextOut &= @TAB & "[" & $o_Element.options.item($s).tagName & " index -> " & $s & "]" & @CRLF
							$s_TextOut &= @TAB & "[value SELECTED = " & $o_Element.options.item($s).value & " -> text SELECTED = " & $o_Element.options.item($s).text & "]" & @CRLF
						Else
							$s_TextOut &= @TAB & "[" & $o_Element.options.item($s).tagName & " index -> " & $s & "]" & @CRLF
							$s_TextOut &= @TAB & "[value = " & $o_Element.options.item($s).value & " -> text = " & $o_Element.options.item($s).text & "]" & @CRLF
						EndIf
					Next
					
					$s_TextOut &= @CRLF
					
				EndIf
				$ii += 1
			EndIf
			$iii += 1
		Next
		$iii = 0
		$ii = 0
		$i += 1
	Next
	
	If $s_Path <> "" Then
		
		If StringRight($s_Path, 1) <> "\" Then  $s_Path &= "\"
		If Not FileExists($s_Path) Then DirCreate($s_Path)
			
		Local $s_FilePath = $s_Path & StringReplace(StringRegExpReplace($s_URL, "http://.*?\.(.*?)?/.*", "$1"), ".", "_") & ".log"
		
		$h_File = FileOpen($s_FilePath, 2)
		FileWrite($h_File, StringReplace($s_TextOut, @CRLF, "", -1))
		FileClose($h_File)
		
		Return SetExtended(1, $s_FilePath)
	Else
		Return SetExtended(0, $s_TextOut)
	EndIf
	
EndFunc; ==>_IEForm_Inspector
 
Верх