Автор Тема: Выполнение скрипта на разных URL  (Прочитано 1499 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Neo [?]

  • Новичок
  • *
  • Сообщений: 43
  • Репутация: 0
    • Награды
  • Версия AutoIt: 3.3.14.0
Здравствуйте.
Помогите.
Скрипт переходит по адресу 1, собирает ссылки со страницы, по ключу $sMyString, в массив, потом переходит по ссылкам из массива и сохраняет их и содержимое в файл.
После выполнения работ скрипт переходит на URL адрес 2 и заканчивает работу.
Как сделать, чтобы после перехода на URL адрес 2 скрипт выполнялся заново,
т.е. после завершения работы на одном URL "$sURL"приступал к работе на следующем по списку"$sURL_1".
Код: AutoIt [Выделить]
#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

« Последнее редактирование: Ноябрь 12, 2016, 21:46:52 от Neo »

Русское сообщество AutoIt

Выполнение скрипта на разных URL
« Отправлен: Ноябрь 12, 2016, 17:51:17 »

Онлайн Alofa [?]

  • Скриптер
  • ****
  • Сообщений: 998
  • Репутация: 128
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.12.0
Re: Выполнение скрипта на разных URL
« Ответ #1, Отправлен: Ноябрь 13, 2016, 00:24:18 »
Не проверял.
Код: AutoIt [Выделить]
#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

----------------------- Вы думаете, всё так просто? Да, всё просто. Но совсем не так. -----------------------
Альберт Эйнштейн.

Оффлайн Neo [?]

  • Новичок
  • *
  • Сообщений: 43

  • Автор темы
  • Репутация: 0
    • Награды
  • Версия AutoIt: 3.3.14.0
Re: Выполнение скрипта на разных URL
« Ответ #2, Отправлен: Ноябрь 13, 2016, 02:59:15 »

Оффлайн Anna [?]

  • Новичок
  • *
  • Сообщений: 102
  • Репутация: 2
  • Пол: Женский
    • Награды
  • Версия AutoIt: 3.3.14.0
Re: Выполнение скрипта на разных URL
« Ответ #3, Отправлен: Декабрь 02, 2016, 21:09:50 »
Alofa
Похожая задача.
На второй странице, могут быть ссылки те, что были на первой странице.
Есть ли возможность не переходить повторно по одной и той же ссылке?
Например, был совершен переход по ссылке содержащей "topic=23115" больше по ссылке в которой есть "topic=23115" не переходить.
Код: AutoIt [Выделить]
#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
 

« Последнее редактирование: Декабрь 02, 2016, 22:49:56 от Anna »

Русское сообщество AutoIt

Re: Выполнение скрипта на разных URL
« Ответ #3 Отправлен: Декабрь 02, 2016, 21:09:50 »

Онлайн Alofa [?]

  • Скриптер
  • ****
  • Сообщений: 998
  • Репутация: 128
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.12.0
Re: Выполнение скрипта на разных URL
« Ответ #4, Отправлен: Декабрь 02, 2016, 23:42:23 »
Код: AutoIt [Выделить]
#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 [?]

  • Новичок
  • *
  • Сообщений: 102
  • Репутация: 2
  • Пол: Женский
    • Награды
  • Версия AutoIt: 3.3.14.0
Re: Выполнение скрипта на разных URL
« Ответ #5, Отправлен: Декабрь 03, 2016, 02:21:34 »
Alofa
Спасибо, однако, прошу обратить внимание, на первой и второй странице
Код: AutoIt [Выделить]
Global $aURLs[2] = ['http://autoit-script.ru/index.php', 'http://autoit-script.ru/index.php?board=4.0']


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

Онлайн Alofa [?]

  • Скриптер
  • ****
  • Сообщений: 998
  • Репутация: 128
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.12.0
Re: Выполнение скрипта на разных URL
« Ответ #6, Отправлен: Декабрь 03, 2016, 22:05:40 »
... есть ссылка содержащая "topic=23115" и по ней совершается повторный переход.
Если формально, то это не так - вторая ссылка "topic=23115.0#msg133964". Вообще это ссылки на одну и туже страницу (только на разные посты), но с точки зрения строкового сравнивания это разные строки.
Для вышеописанных ссылок подойдет следующий фильтр:
Код: AutoIt [Выделить]
; замените
$sRes = StringToBinary($aResult[$i])
; на
$sRes = StringToBinary(StringRegExpReplace($aResult[$i], '(.+\.).*', '${1}0'))


Оффлайн Anna [?]

  • Новичок
  • *
  • Сообщений: 102
  • Репутация: 2
  • Пол: Женский
    • Награды
  • Версия AutoIt: 3.3.14.0
Re: Выполнение скрипта на разных URL
« Ответ #7, Отправлен: Декабрь 05, 2016, 00:40:34 »
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
Что изменить?

Русское сообщество AutoIt

Re: Выполнение скрипта на разных URL
« Ответ #7 Отправлен: Декабрь 05, 2016, 00:40:34 »

Онлайн Alofa [?]

  • Скриптер
  • ****
  • Сообщений: 998
  • Репутация: 128
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.12.0
Re: Выполнение скрипта на разных URL
« Ответ #8, Отправлен: Декабрь 05, 2016, 00:53:17 »
Anna я же писал:
... Для вышеописанных ссылок ...
Для каждого сайта свой Pattern.

Оффлайн Anna [?]

  • Новичок
  • *
  • Сообщений: 102
  • Репутация: 2
  • Пол: Женский
    • Награды
  • Версия AutoIt: 3.3.14.0
Re: Выполнение скрипта на разных URL
« Ответ #9, Отправлен: Декабрь 05, 2016, 02:57:27 »
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
И скажите, пожалуйста, словами эту строку
Код: AutoIt [Выделить]
, '(.+\.).*', '${1}0'))

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

А если записывать в файл ссылки, по которым совершили переход а потом перед переходом сравнивать их с той, по которой хотим перейти. Такое можно сделать?
« Последнее редактирование: Декабрь 05, 2016, 03:16:57 от Anna »

Онлайн Alofa [?]

  • Скриптер
  • ****
  • Сообщений: 998
  • Репутация: 128
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.12.0
Re: Выполнение скрипта на разных URL
« Ответ #10, Отправлен: Декабрь 05, 2016, 11:53:13 »
... Для таких ссылок, какой можно сделать фильтр?
Код: AutoIt [Выделить]
$sRes = StringToBinary(StringRegExpReplace($aResult[$i], '(.+\.html?).*', '$1'))

OffTopic
... скажите, пожалуйста, словами эту строку
Код: AutoIt [Выделить]
, '(.+\.).*', '${1}0'))

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

Оффлайн Anna [?]

  • Новичок
  • *
  • Сообщений: 102
  • Репутация: 2
  • Пол: Женский
    • Награды
  • Версия AutoIt: 3.3.14.0
Re: Выполнение скрипта на разных URL
« Ответ #11, Отправлен: Декабрь 06, 2016, 21:16:00 »
Спасибо.
Спасибо, за пояснения и ссылку.
« Последнее редактирование: Декабрь 20, 2016, 08:51:13 от Anna »

Русское сообщество AutoIt

Re: Выполнение скрипта на разных URL
« Ответ #11 Отправлен: Декабрь 06, 2016, 21:16:00 »

 

Похожие темы

  Тема / Автор Ответов Последний ответ
11 Ответов
9104 Просмотров
Последний ответ Январь 16, 2017, 11:04:47
от Garrett
9 Ответов
4722 Просмотров
Последний ответ Май 22, 2012, 12:23:31
от madmasles
4 Ответов
2738 Просмотров
Последний ответ Ноябрь 27, 2011, 01:03:08
от LightDemon
11 Ответов
5580 Просмотров
Последний ответ Июль 27, 2012, 13:08:55
от AZJIO
5 Ответов
2419 Просмотров
Последний ответ Апрель 04, 2013, 18:58:36
от InnI
1 Ответов
1669 Просмотров
Последний ответ Ноябрь 26, 2013, 18:28:49
от AZJIO
5 Ответов
1941 Просмотров
Последний ответ Февраль 06, 2015, 18:01:56
от Yashied
2 Ответов
693 Просмотров
Последний ответ Апрель 05, 2015, 16:12:05
от _cooper
3 Ответов
879 Просмотров
Последний ответ Апрель 15, 2015, 08:23:06
от neversaymoo
26 Ответов
4359 Просмотров
Последний ответ Январь 27, 2016, 19:09:22
от AngryFlay