Что нового

Выполнение скрипта на разных URL

Neo

Новичок
Сообщения
46
Репутация
0
Здравствуйте.
Помогите.
Скрипт переходит по адресу 1, собирает ссылки со страницы, по ключу $sMyString, в массив, потом переходит по ссылкам из массива и сохраняет их и содержимое в файл.
После выполнения работ скрипт переходит на URL адрес 2 и заканчивает работу.
Как сделать, чтобы после перехода на URL адрес 2 скрипт выполнялся заново,
т.е. после завершения работы на одном URL "$sURL"приступал к работе на следующем по списку"$sURL_1".
Код:
#include <IE.au3>
#include <Array.au3>

HotKeySet('{Esc}', '_Exit')
Dim $sMyString = "al52"
Dim $aResult[1]
Dim $aSubmit[1]

$sURL   = 'http://0'
$sURL_1 = 'http://1'
$sURL_2 = "http://2"
$oIE = _IECreate($sURL)
$oLinks = _IELinkGetCollection($oIE)

For $i = 0 To 1
  For $oLink in $oLinks
    If StringInStr($oLink.href, $sMyString) Then
        $aResult[0] = UBound($aResult)
        _ArrayAdd($aResult, $oLink.href)
    EndIf
  Next
Next

;_ArrayDisplay($aResult) ; смотрим массив с найденными ссылками
For $i = 1 To UBound($aResult) - 1
    _IENavigate($oIE, $aResult[$i])
    ;в цикле переходим по ссылкам из массива
    $sText = _IEBodyReadText($oIE)
    ;читаем текст страницы
    If $sText Then
        ;если прочитали.
        $hFile = FileOpen(@ScriptDir & '\' & $i & '_Test.txt', 2)
        ;открываем файл
        FileWrite($hFile, $aResult[$i] & @CRLF & @CRLF & $sText)
        ;записывем в него ссылку страницы и ее текст
        FileClose($hFile)
        ;закрываем файл
		Sleep(5000)
    EndIf
Next
;переходим на адрес 2
_IENavigate($oIE, $sUrl_1)
Func _Exit()
Exit
EndFunc
 
A

Alofa

Гость
Не проверял.
Код:
#include <IE.au3>
#include <Array.au3>

HotKeySet('{Esc}', '_Exit')
Global $oIE = _IECreate()
Global $sMyString = "al52"
Global $aURLs[3] = ['http://0', 'http://1', 'http://2']

For $i = 0 To UBound($aURLs) -1 ; Цикл повторится 3 раза. Если нужен бесконечный цикл, используйте While...WEnd
	_FuncName($aURLs[$i], $sMyString)
	Sleep(5000)
Next

Func _FuncName($sURL, $sMyString)
	Local $oLinks, $aResult[1], $sText, $hFile
	
	_IENavigate($oIE, $sURL)
	$oLinks = _IELinkGetCollection($oIE)
	
	For $i = 0 To 1
		For $oLink In $oLinks
			If StringInStr($oLink.href, $sMyString) Then
				$aResult[0] = UBound($aResult)
				_ArrayAdd($aResult, $oLink.href)
			EndIf
		Next
	Next

	;_ArrayDisplay($aResult) ; смотрим массив с найденными ссылками
	For $i = 1 To UBound($aResult) - 1
		_IENavigate($oIE, $aResult[$i])
		;в цикле переходим по ссылкам из массива
		$sText = _IEBodyReadText($oIE)
		;читаем текст страницы
		If $sText Then
			;если прочитали.
			$hFile = FileOpen(@ScriptDir & '\' & $i & '_Test.txt', 2)
			;открываем файл
			FileWrite($hFile, $aResult[$i] & @CRLF & @CRLF & $sText)
			;записывем в него ссылку страницы и ее текст
			FileClose($hFile)
			;закрываем файл
		EndIf
	Next
EndFunc   ;==>_FuncName

Func _Exit()
	Exit
EndFunc   ;==>_Exit
 

Anna

Новичок
Сообщения
119
Репутация
2
Alofa
Похожая задача.
На второй странице, могут быть ссылки те, что были на первой странице.
Есть ли возможность не переходить повторно по одной и той же ссылке?
Например, был совершен переход по ссылке содержащей "topic=23115" больше по ссылке в которой есть "topic=23115" не переходить.
Код:
#include <IE.au3>
#include <Array.au3>

HotKeySet('{Esc}', '_Exit')
Global $oIE = _IECreate()
Global $sMyString = "topic=23"
Global $aURLs[2] = ['http://autoit-script.ru/index.php', 'http://autoit-script.ru/index.php?board=4.0']

For $i = 0 To UBound($aURLs) -1 ; Цикл повторится 3 раза. Если нужен бесконечный цикл, используйте While...WEnd
    _FuncName($aURLs[$i], $sMyString)
    Sleep(5000)
Next

Func _FuncName($sURL, $sMyString)
    Local $oLinks, $aResult[1], $sText, $hFile

    _IENavigate($oIE, $sURL)
    $oLinks = _IELinkGetCollection($oIE)

    For $i = 0 To 1
        For $oLink In $oLinks
            If StringInStr($oLink.href, $sMyString) Then
                $aResult[0] = UBound($aResult)
                _ArrayAdd($aResult, $oLink.href)
            EndIf
        Next
    Next

    _ArrayDisplay($aResult) ; смотрим массив с найденными ссылками
    For $i = 1 To UBound($aResult) - 1
        _IENavigate($oIE, $aResult[$i])
        ;в цикле переходим по ссылкам из массива
        $sText = _IEBodyReadText($oIE)
        ;читаем текст страницы
        If $sText Then
            ;если прочитали.
            $hFile = FileOpen(@ScriptDir & '\' & $i & '_Test.txt', 2)
            ;открываем файл
            FileWrite($hFile, $aResult[$i] & @CRLF & @CRLF & $sText)
            ;записывем в него ссылку страницы и ее текст
            FileClose($hFile)
            ;закрываем файл
        EndIf
    Next
EndFunc   ;==>_FuncName

Func _Exit()
    Exit
EndFunc   ;==>_Exit
 
A

Alofa

Гость
Код:
#include <IE.au3>
#include <Array.au3>

HotKeySet('{Esc}', '_Exit')
Global $oIE = _IECreate()
Global $sMyString = "topic=23"
Global $aURLs[2] = ['http://autoit-script.ru/index.php', 'http://autoit-script.ru/index.php']

For $i = 0 To UBound($aURLs) - 1
	_FuncName($aURLs[$i], $sMyString)
	Sleep(3000)
Next

_Exit()

Func _FuncName($sURL, $sMyString)
	Local $oLinks, $aResult[1], $sText, $hFile

	_IENavigate($oIE, $sURL)
	$oLinks = _IELinkGetCollection($oIE)

	For $i = 0 To 1
		For $oLink In $oLinks
			If StringInStr($oLink.href, $sMyString) Then
				$aResult[0] = UBound($aResult)
				_ArrayAdd($aResult, $oLink.href)
			EndIf
		Next
	Next
	
	For $i = 1 To UBound($aResult) - 1
		$sRes = StringToBinary($aResult[$i]) ; Для исключения недопустимых знаков в названии переменной, объявляемой через Assign()
		If IsDeclared($sRes) Then ; Проверяет существование указанной переменной.
			ConsoleWrite('!<Уже была> ' & $aResult[$i] & @LF)
		Else
			Assign($sRes, $sRes, 2) ; Создаёт переменную в глобальной области видимости
			_IENavigate($oIE, $aResult[$i])
			$sText = _IEBodyReadText($oIE)
;~ 			If $sText Then FileWrite(@ScriptDir & '\' & $i & '_Test.txt', $aResult[$i] & @CRLF & @CRLF & $sText)
			If $sText Then ConsoleWrite('+> ' & $aResult[$i] & @LF) ; <<<<<<<<<< П Р О В Е Р К А >>>>>>>>>>
		EndIf
	Next
EndFunc   ;==>_FuncName

Func _Exit()
	_IEQuit($oIE)
	Exit
EndFunc   ;==>_Exit
 

Anna

Новичок
Сообщения
119
Репутация
2
Alofa
Спасибо, однако, прошу обратить внимание, на первой и второй странице
Код:
Global $aURLs[2] = ['http://autoit-script.ru/index.php', 'http://autoit-script.ru/index.php?board=4.0']


есть ссылка содержащая "topic=23115" и по ней совершается повторный переход.
 
A

Alofa

Гость
Anna сказал(а):
... есть ссылка содержащая "topic=23115" и по ней совершается повторный переход.
Если формально, то это не так - вторая ссылка "topic=23115.0#msg133964". Вообще это ссылки на одну и туже страницу (только на разные посты), но с точки зрения строкового сравнивания это разные строки.
Для вышеописанных ссылок подойдет следующий фильтр:
Код:
; замените
$sRes = StringToBinary($aResult[$i])
; на
$sRes = StringToBinary(StringRegExpReplace($aResult[$i], '(.+\.).*', '${1}0'))
 

Anna

Новичок
Сообщения
119
Репутация
2
Alofa
Большое Спасибо.

Извините, не соображу.
Есть ссылки, которые отбираю по “view”
Переход осуществляется только по первой ссылке из массива, потом идёт следующее
Код:
!<Уже была> http://bla-bla.com/account/view.html?id=185759
!<Уже была> http:// bla-bla.com/account/view.html?id=189391
!<Уже была> http:// bla-bla.com/account/view.html?id=187977
Что изменить?
 

Anna

Новичок
Сообщения
119
Репутация
2
Alofa [?]
Для вышеописанных ссылок подойдет следующий фильтр:
Для таких ссылок, какой можно сделать фильтр?
Код:
http://bla-bla.com/account/view.html?id=185759
http:// bla-bla.com/account/view.html?id=189391
http:// bla-bla.com/account/view.html?id=187977
И скажите, пожалуйста, словами эту строку
Код:
, '(.+\.).*', '${1}0'))

Что на что меняется в строке?

А если записывать в файл ссылки, по которым совершили переход а потом перед переходом сравнивать их с той, по которой хотим перейти. Такое можно сделать?
 
A

Alofa

Гость
Anna сказал(а):
... Для таких ссылок, какой можно сделать фильтр?
Код:
$sRes = StringToBinary(StringRegExpReplace($aResult[$i], '(.+\.html?).*', '$1'))

OffTopic:

Anna сказал(а):
... скажите, пожалуйста, словами эту строку
Код:
, '(.+\.).*', '${1}0'))
К примеру дана строка:"http://autoit-script.ru/index.php?topic=231309.msg134008;topicseen#new"
Нам ее нужно почистить и оставить только то что синее.
Pattern: '(.+\.).*' --> Ищем группу, оканчивающуюся на точку (Если точек много, то будет взята самая правая). После группы следует все остальное, ненужное нам.
Таким образом, данным регулярным выражением мы описали всю строку.
Replace: '${1}0' --> Заменяем всю строку на группу, которую нашли и добавляем в конце ноль.
Более подробно Здесь.
 

Anna

Новичок
Сообщения
119
Репутация
2
Спасибо.
Спасибо, за пояснения и ссылку.
 
Верх