Что нового

[Автоматизация] IE определение масива ссылок и нажатие на кнопку в каждой

AlexVong

Новичок
Сообщения
112
Репутация
1
Стоит следующая задача... возможно ли вообще такое? Нужно отслеживать IE и при открытии вкладки "Список" выбрать из
Код:
</tr><tr class="BodyCell" align="center" style="font-family:Verdana;font-size:10pt;Color:Black;">
		<td><a title="Просмотр" href="/server/documentview/default.aspx?num=10101010">10101010<a></td><td>000</td><td align="left" style="font-weight:normal;font-style:normal;text-decoration:none;white-space:nowrap;">Сумма</td><td align="right" style="font-weight:normal;font-style:normal;text-decoration:none;white-space:nowrap;">  555.55</td><td align="right" style="font-weight:normal;font-style:normal;text-decoration:none;white-space:nowrap;">    0.00</td><td align="left" style="font-weight:normal;font-style:normal;text-decoration:none;">Сумма</td><td style="font-weight:normal;font-style:normal;text-decoration:none;white-space:nowrap;">10.10.2012 10:10:10</td>
	</tr><tr class="BodyCell" align="center" style="font-family:Verdana;font-size:10pt;Color:Black;">
		<td><a title="Просмотр" href="/server/documentview/default.aspx?num=20202020">20202020<a></td><td>001</td><td align="left" style="font-weight:normal;font-style:normal;text-decoration:none;white-space:nowrap;">Сумма</td><td align="right" style="font-weight:normal;font-style:normal;text-decoration:none;white-space:nowrap;">   555.55</td><td align="right" style="font-weight:normal;font-style:normal;text-decoration:none;white-space:nowrap;">    0.00</td><td align="left" style="font-weight:normal;font-style:normal;text-decoration:none;">Сумма</td><td style="font-weight:normal;font-style:normal;text-decoration:none;white-space:nowrap;">10.10.2012 11:11:11</td>
	</tr><tr class="BodyCell" align="center" style="font-family:Verdana;font-size:10pt;Color:Black;">
		<td><a title="Просмотр" href="/server/documentview/default.aspx?num=30303030">30303030<a></td><td>001</td><td align="left" style="font-weight:normal;font-style:normal;text-decoration:none;white-space:nowrap;">Сумма</td><td align="right" style="font-weight:normal;font-style:normal;text-decoration:none;white-space:nowrap;">   555.55</td><td align="right" style="font-weight:normal;font-style:normal;text-decoration:none;white-space:nowrap;">    0.00</td><td align="left" style="font-weight:normal;font-style:normal;text-decoration:none;">Сумма</td><td style="font-weight:normal;font-style:normal;text-decoration:none;white-space:nowrap;">10.10.2012 15:15:15</td>
	</tr><tr class="BodyCell" align="center" style="font-family:Verdana;font-size:10pt;Color:Black;">
		<td><a title="Просмотр" href="/server/documentview/default.aspx?num=40404040">40404040<a></td><td>000</td><td align="left" style="font-weight:normal;font-style:normal;text-decoration:none;white-space:nowrap;">Сумма</td><td align="right" style="font-weight:normal;font-style:normal;text-decoration:none;white-space:nowrap;">   555.55</td><td align="right" style="font-weight:normal;font-style:normal;text-decoration:none;white-space:nowrap;">    0.00</td><td align="left" style="font-weight:normal;font-style:normal;text-decoration:none;">Сумма</td><td style="font-weight:normal;font-style:normal;text-decoration:none;white-space:nowrap;">10.10.2012 15:15:15</td>

все ссылки типа "/server/documentview/default.aspx?num=40404040", "/server/documentview/default.aspx?num=20202020" и т.д.
вывести сообщение с количеством найденных ссылок, и после последовательно по очереди открыть ссылку www.base + "/server/documentview/default.aspx?num=40404040" нажать на сылку "печать" на странице
Код:
<a onclick="getTicketFile('10101010');return false;" id="PrintFile" tabindex="5" href="javascript:__doPrintBack('printFile','')" style="color:Black;background-color:WhiteSmoke;font-weight:normal;">печать</a>
            </td>
вернуться, открыть следующую ссылку и так далее...
Ссылку на сайт не могу дать, т.к. он находится в закрытой локальной сети.
 

Fever

Скриптер
Сообщения
308
Репутация
112
Код:
#include <Array.au3>
#include <IE.au3>

Global _
		$sLink = "http://base", _ ; ссылка
		$sID = "PrintFile" ; ID кнопки "печать"

$sText = FileRead("1.txt") ;исходный код страницы

$aLink = StringRegExp($sText, "\/server\/documentview\/default\.aspx\?num=\d{3,}", 3) ;получаем список ссылок
_ArrayDisplay($aLink) ; список ссылок

$oIE = _IECreate("")  ; объект браузера

For $i = 0 To UBound($aLink) - 1  ; в цикле
	_IENavigate($oIE, $sLink & $aLink[$i])  ; переходим по ссылке
	$oQuery = _IEGetObjById($oIE, $sID)  ; получаем объект по ID
	_IEAction($oQuery, "click") ; кликаем на него
	Sleep(100)
Next
 
Автор
A

AlexVong

Новичок
Сообщения
112
Репутация
1
Fever Спасибо, не думал что такое возможно.
Подскажите еще пожалуйста,
- возможно сохранить при помощи autoit активную страницу в файл 1.txt
- возможно отбирать ссылки только те которые удовлетворяют условию = второе цифровое поле всегда равно 0.00 (как в примере кода первое поле = 555.55, второе 0.00)
Заранее спасибо!
 

Fever

Скриптер
Сообщения
308
Репутация
112
AlexVong [?]
возможно сохранить при помощи autoit активную страницу в файл 1.txt

Код:
#include <IE.au3>

$oIE = _IECreate("autoit-script.ru")

$sHtml = _IEBodyReadHTML($oIE)

FileWrite("1.txt", $sHtml)


возможно отбирать ссылки только те которые удовлетворяют условию

Код:
#include <Array.au3>
#include <IE.au3>

$sText = FileRead("1.txt") ;исходный код страницы

$aLink = StringRegExp($sText, "\/server\/documentview\/default\.aspx\?num=\d{3,}", 3) ;получаем список ссылок
$aLabel = StringRegExp($sText, '\s{2,}\d{1,}\.{1,}\d{1,}', 3)

_ArrayDisplay($aLink) ; список ссылок
_ArrayDisplay($aLabel) ; список значений полей


во втором массиве уже вывод значений из полей, далее сравнивать, но не уверен, что это именно то, что нужно.
 
Автор
A

AlexVong

Новичок
Сообщения
112
Репутация
1
Fever Спасибо большое...
Тему раскрыта - ставлю решенной....
Остался только вопрос по сохранению текущей открытой страницы а не создаваемой...
И нигде не увидел, возможно ли реализовать выгрузку списка ссылок в форму с checkbox-ми, с возможностью выделить нужные ссылки и обработать их...
Думаю применить
Код:
GUICtrlCreateListViewItem
, вот толька как засунуть туда мои ссылки :scratch:
 

Fever

Скриптер
Сообщения
308
Репутация
112
AlexVong [?]
возможно ли реализовать выгрузку списка ссылок в форму с checkbox-ми, с возможностью выделить нужные ссылки и обработать их

Код:
#include <GUIConstantsEx.au3>

$sText = FileRead("1.txt") ;исходный код страницы

$aLink = StringRegExp($sText, "\/server\/documentview\/default\.aspx\?num=\d{3,}", 3) ;получаем список ссылок
$aLabel = StringRegExp($sText, '\s{2,}\d{1,}\.{1,}\d{1,}', 3)

;_ArrayDisplay($aLink) ; список ссылок
;_ArrayDisplay($aLabel) ; список значений полей

Dim $aCombo[UBound($aLink)] ; массив чекбоксов, аналогичен по размеру с количеством ссылок

GUICreate("", 500, 400)

For $i = 0 To UBound($aLink) - 1
	$aCombo[$i] = GUICtrlCreateCheckbox($aLink[$i], 10, 20*$i) ; создаем чекбоксы со смещением в 20 пикселей вниз
Next

$hWorkOut = GUICtrlCreateButton("Показать выделенные", 340, 350, 140, 30) ; кнопка

GUISetState()

While 1
	Switch GUIGetMsg()
		Case -3
			Exit
		Case $hWorkOut 
			Local $iNum = 0

			For $i = 0 To UBound($aCombo) - 1 
				If GUICtrlRead($aCombo[$i]) == $GUI_CHECKED Then  ; в цикле проверяем массив контролов не выделен ли один из них
					$iNum += 1 ; если да, то инкрементируем переменную
				EndIf
			Next

			MsgBox(0, "", "Всего выделено: " & $iNum) 
	EndSwitch
WEnd
 
Автор
A

AlexVong

Новичок
Сообщения
112
Репутация
1
:stars: Никогда не думал что такое можно будет реализовать, прикрутить бы к этой форме рабочий вертикальный скрол (скрол сделал но он не прокручивается) и кнопку которая бы выполняла след... код
Код:
$oIE = _IECreate("")  ; объект браузера

For $i = 0 To UBound($aLink) - 1  ; в цикле
    _IENavigate($oIE, $sLink & $aLink[$i])  ; переходим по ссылке
    $oQuery = _IEGetObjById($oIE, $sID)  ; получаем объект по ID
    _IEAction($oQuery, "click") ; кликаем на него
    Sleep(100)
Next

над сылками которые отмечены флажками. :smile:
 

Fever

Скриптер
Сообщения
308
Репутация
112
AlexVong [?]
прикрутить бы к этой форме рабочий вертикальный скрол (скрол сделал но он не прокручивается) и кнопку которая бы выполняла след... код

Код:
#include <GUIConstantsEx.au3>
#include <GuiListView.au3>
#include <Array.au3>
#include <IE.au3>

Local $exStyles = BitOR($LVS_EX_FULLROWSELECT, $LVS_EX_CHECKBOXES)

Global _
		$sLink = "http://base"

$sText = FileRead("1.txt") ;исходный код страницы

$aLink = StringRegExp($sText, "\/server\/documentview\/default\.aspx\?num=\d{3,}", 3) ;получаем список ссылок
$aLabel = StringRegExp($sText, '\s{2,}\d{1,}\.{1,}\d{1,}', 3)

;_ArrayDisplay($aLink) ; список ссылок
;_ArrayDisplay($aLabel) ; список значений полей

Dim $aInf[UBound($aLink)][3] ; новый массив для ф-ции   _GUICtrlListView_AddArray

For $i = 0 To UBound($aLink) - 1
	$aInf[$i][0] = $aLink[$i] ; копируем данные о ссылках в новый массив
Next

GUICreate("", 500, 400)

$hListView = GUICtrlCreateListView("", 2, 2, 394, 268)
_GUICtrlListView_SetExtendedListViewStyle($hListView, $exStyles) ; стиль ListView с чекбоксами

_GUICtrlListView_AddColumn($hListView, "Ссылки", 300) ; колонка "Ссылки"
_GUICtrlListView_AddArray($hListView, $aInf) ; всталяем массив данных

$hWorkOut = GUICtrlCreateButton("Показать выделенные", 340, 350, 140, 30)

GUISetState()

While 1
	Switch GUIGetMsg()
		Case -3
			Exit
		Case $hWorkOut
			$iCount = _GUICtrlListView_GetItemCount($hListView) ; общее количество элементов
			$oIE = _IECreate("") ; открываем браузер

			For $i = 0 To $iCount ; в цикле
				If _GUICtrlListView_GetItemChecked($hListView, $i) Then ; проверяем не отмечен ли элемент, если да, то
					$aArr = _GUICtrlListView_GetItem($hListView, $i) ; берем информацию об элементе, где [3] ячейка - текст, т.е. ссылка

					_Print($aArr[3]) ; функция для печати
				EndIf
			Next

			_IEQuit($oIE) ; закрываем браузер
	EndSwitch
WEnd

Func _Print($_sLink)
	_IENavigate($oIE, $sLink & $_sLink)  ; переходим по ссылке
	$oQuery = _IEGetObjById($oIE, "PrintFile")  ; получаем объект по ID
	_IEAction($oQuery, "click") ; кликаем на него
	_IELoadWait($oIE) ; ждем загрузки страницы в IE
	Sleep(100)
EndFunc
 
Автор
A

AlexVong

Новичок
Сообщения
112
Репутация
1
Fever Спасибо огромное!!!
Тема решена.


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

Не буду создавать новую тему, спрошу в текущей, как на форме создать чекбокс установка/снятие флажка в котором отражалось бы во всех чекбоксах на ListView?
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,321
AlexVong [?]
Не буду создавать новую тему, спрошу в текущей
А зря...

Предупреждение За нарушение общих правил (пункт В.4):
Не лепите несколько вопросов разной тематики в один пост. По типу "Ребят, а ещё такой вопрос...". Каждый вопрос в свою тему.


С уважением, ваш Модератор.
 
Верх