Что нового

[Сеть, интернет] Поиск ссылки если не найдена кликаем на другую в IE

ssvih

Новичок
Сообщения
35
Репутация
1
Всем привет, перерыл форум ничего подходящего не нашел, если был не внимателен за ранее прошу прощения!
И так по сути, нужно осуществить следующее действие, поиск ссылки на странице если такой ссылки не найдено переход по альтернативной ссылке и поиск на ней, и так до 8 страницы, далее не имеет смысла искать, что бы стало более понятно то нужно осуществить поиск статьи зная текст ссылки, если не находим то переходим на страницу 2 со статьями и так далее!
Как это осуществить подскажите люди добрые )
 

sngr

AutoIT Гуру
Сообщения
1,010
Репутация
408
Re: [Сеть, интернет] If Then Else Endfi в IE

Код:
Dim $arr[2][1] = [['yandex.ru'],['google.ru']]
For $i=0 To UBound($arr)-1
If StringRegExp(BinaryToString(InetRead($arr[$i]),4),'fdsfsdfsdfsdfsd') Then
	MsgBox(0,'','1')
	ExitLoop
	EndIf
Next
 
Автор
S

ssvih

Новичок
Сообщения
35
Репутация
1
Я не понял выражения что вы привели!
Могу ли я решить таким вот способом
Код:
$440310 = _IELinkClickByText ($oIE, "Текст ссылки") ; то что надо найти
$str2 = _IELinkClickByText ($oIE, "2")
$str3 = _IELinkClickByText ($oIE, "3")
$str4 = _IELinkClickByText ($oIE, "4")
....

И потом применить такой код как
Код:
If $440310 Not Then
   $str2
EndIf

Ну или что-то похожее, а то ваш пример мне не понятен. Сори конечно, но я новичек!
 

eropov

Jury
Сообщения
195
Репутация
25
ssvih
Я не понял выражения что вы привели! (ваш пример мне не понятен. Сори конечно, но я новичек!)
Я тоже новичек и мне это код понятен. Уважаемый воспользуйтесь справкой, мне не понятна строчка
Код:
If $440310 Not Then

может так :smile:
Код:
If $440310 == -1 Then

И вообще нужен как минимум html код страници с которой вы собрались работать, если хотите получить готовый код скрипта.

P.S. Если вы будете говорить, что вы новичек и вам что то не понятно, то люди откликнувшиеся на помощь, попросту забьют на вашу тему и придется вам понять то что вы уже имеете. Я тоже плохо шарил по началу в autoit, но пользовавшись справкой в коей мере уже начал разбираться.
 
Автор
S

ssvih

Новичок
Сообщения
35
Репутация
1
Готовый код скрипта это ну я не знаю по меньшей мере 1/100 от всей задумки )
Немного истории мне удалось осуществить данную задачу по средствам "MouseRobot" но я прекрасно понимаю что это крайней мере низко уровневое программирование, вот хочу повторить все на AutoIT вот то что у меня есть на данный момент
Код:
#include <IE.au3>
$oIE = _IECreate ()
$sHTML = "<center><h1>Web-ip.ru - задание №511603 </h1></ br> Автоматическое выполнинеи задания начнется через 5 секунд! 
 Новые задания можно приобрести на <b>www.site.ru</b></center>"
_IEBodyWriteHTML ($oIE, $sHTML)
Sleep(1000)
_IENavigate ($oIE, "http://www.web-ip.ru/")
_IELoadWait ($oIE)
$sWMID = 'Логин'
$sPASS = 'Пароль'
$oWMID = _IEGetObjById($oIE, 'WMID')
$oPASS = _IEGetObjById($oIE, 'PASS')
_IEFormElementSetValue($oWMID, $sWMID)
_IEFormElementSetValue($oPASS, $sPASS)
Sleep(2000)
$GO = _IEGetObjById($oIE, 'subent')
_IEAction($GO, 'click')
_IELoadWait ($oIE)
; Авторизируемся на сайте
Sleep(2000)
_IELinkClickByText ($oIE, "Задания") ; Жмем на ссылку Задания
_IELoadWait ($oIE)
Sleep(2000)
_IELinkClickByText ($oIE, "VIP задания") ; Переходим в VIP задания
_IELoadWait ($oIE)
Sleep(2000)

В MouseRobot я просто искал текст на странице потом выделял его и нажимал TAB, ENTER если не находил текст а точнее номер задания то искал ссылку с текстом "2" далее пауза и повтор действий вплоть до 8 страницы.
Как все это осуществить здесь я не понимаю ) Совсем по другому If Then Else работают, там я мог задать значения здесь не получается, видимо это из-за моей не грамотности в этом вопросе )

Код со страницы
Код:
<td align="center" bgcolor="#f0f0e8" style="BORDER-TOP: #aaaeb3 1px solid;BORDER-RIGHT: #aaaeb3 1px solid" width="7%"><font class='main'>440310
<img src="images/vip.gif" title="+ 300 ед."><div id="f440310"></div><div id="sh440310"></div></td>
	  <td bgcolor="#f0f0e8" style="BORDER-TOP: #aaaeb3 1px solid;BORDER-RIGHT: #aaaeb3 1px solid" width="54%">
	  <table border="0" cellpadding="1" cellspacing="0" width="100%">
	  <tr><td height="30" colspan="2"><font class='main'><a href="index.php?action=members&where=work&type=8&type2=&page=1&lm=&work_id=440310">Простой КЛИК по ФИНАНСЫ. Задание на каждый день</a>
Из кода видно что номер не является ссылкой но имеет кучу div id и один class=main можно ли выделить текст по классу. Если нет то можно настроить поиск ссылки по тексту он вроде как постоянный. Так же если мы не находим текст или div или class нужно перейти на след страницу об этом я уже писал.
 

eropov

Jury
Сообщения
195
Репутация
25
<b>ssvih</b>
В ЛС тоже не следует писать, задавайте вопросы по теме, в той теме которую создали)
Есть раздел http://autoit-script.ru/index.php/board,14.0.html
В нем как минимум советую скачать справку по функциям http://autoit-script.ru/index.php/topic,10070.0.html
и книгу по autoit переведенную на русскийhttp://autoit-script.ru/index.php/topic,33.0.html
На форуме принято ставить +1, если информация которой вам помогли решила ваш вопрос, да и +1 попрошайничать запрещено, это нарушение некого пункта соглашения.
 

C2H5OH

AutoIT Гуру
Сообщения
1,473
Репутация
333
Не понимаю как вы живёте без рекурсии...

Код:
#include <IE.au3>
$oIE = _IECreate ("http://www.web-ip.ru/")
; ...

_ssvih($oIE, "Текст ссылки", 1)

Func _ssvih($oIE, $text, $str)
	If $str > 8 Then Return
	_IELinkClickByText($oIE, String($str))
	If _IELinkClickByText ($oIE, $text) <> -1 Then _ssvih($oIE, $text, $str+1)
EndFunc
 

eropov

Jury
Сообщения
195
Репутация
25
C2H5OH
Не понимаю как вы живёте без рекурсии...
На всем протяжении программирования на autoit? мне ни разу не приходилось использовать рекурсию .... :smile:

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

HotKeySet("{Esc}", "_Exit");выключает скрипт
Global $aLink
Global $sWMID = ''
Global $sPASS = ''

$oIE = _IECreate("http://www.web-ip.ru/")
$oWMID = _IEGetObjById($oIE, 'WMID')
$oPASS = _IEGetObjById($oIE, 'PASS')
_IEFormElementSetValue($oWMID, $sWMID)
_IEFormElementSetValue($oPASS, $sPASS)
$GO = _IEGetObjById($oIE, 'subent')
_IEAction($GO, 'click')

_IELoadWait($oIE, 2000)
_IELinkClickByText($oIE, "Задания") ; Жмем на ссылку Задания
_IELoadWait($oIE, 2000)
_IELinkClickByText($oIE, "VIP задания") ; Переходим в VIP задания
_IELoadWait($oIE, 2000)

For $j = 1 To 7
	ConsoleWrite("Прошли на " & $j & "-ю страницу" & @CRLF)
	$oArray = _IETableGetCollection($oIE, 17)
	$aRes = _IETableWriteToArray($oArray)
	_ArrayDisplay($aRes);Просматриваем таблицу в массиве
	For $i = 2 To UBound($aRes, 2) - 1
		If StringRegExp($aRes[1][$i], 'Простой ГУГЛ - Недвижимость. Дорогое задание ') Then
			$aLink[UBound($aLink)] = 'http://www.web-ip.ru/index.php?action=members&where=work&type=8&type2=&page=' & $j & '&lm=&work_id=' & $aRes[0][$i]
			MsgBox(1, $i, $aRes[1][$i])
		Else
			ConsoleWrite($j & " | " & $i & ' Мы не нашли то что нам нужно' & @CRLF)
		EndIf
	Next
	_IELinkClickByText($oIE, $j)
Next

Func _Exit()
	Exit
EndFunc   ;==>_Exit
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
626
OffTopic:
Как сказал Дойч – "Итерация от человека, рекурсия – от бога" ;D
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
C2H5OH [?]
Не понимаю как вы живёте без рекурсии
В данном случае она не нужна. Я бы не стал так просто направо и налево использовать рекурсию, только при необходимости (очень редко когда может понадобиться).
 
Автор
S

ssvih

Новичок
Сообщения
35
Репутация
1
Что дописать еще для данного решения, остановился на ...
Код:
$gClick[6][5][4][3][2][1] = [['Приобретение недвижимости в США » Финансовый мир'],['Прямые инвестиции » Финансовый мир'],['Недвижимость – таунхаус » Финансовый мир'],['Аренда коммерческой недвижимости » Финансовый мир'],['Форекс и инвесторы » Финансовый мир'],['Недвижимость » Финансовый мир']]
For $i=0 To UBound($gClick)-1

Чето не пойму как быть дальше )
P.S. Это не ссылки а текст ссылок, думаю это важно )

Будет ли решение правильным если выполнить его таким способом?

Код:
$gClick[6][5][4][3][2][1] = [['Приобретение недвижимости в США » Финансовый мир'],['Прямые инвестиции » Финансовый мир'],['Недвижимость – таунхаус » Финансовый мир'],['Аренда коммерческой недвижимости » Финансовый мир'],['Форекс и инвесторы » Финансовый мир'],['Недвижимость » Финансовый мир']]
For $i=0 To UBound($gClick)-1
If _IELinkClickByText($oIE, $gClick[$i]) Then
MsgBox(0,'','1')
    ExitLoop
    EndIf
 Next


Выдает ошибку "Error:Expected a "=" operator in assignment statement"
Не пойму почему не присваивается $gClick???

Ахаха решил вот так
Код:
_IELinkClickByText($oIE, "Приобретение недвижимости в США » Финансовый мир")
_IELinkClickByText($oIE, "Прямые инвестиции » Финансовый мир")
_IELinkClickByText($oIE, "Недвижимость – таунхаус » Финансовый мир")
_IELinkClickByText($oIE, "Аренда коммерческой недвижимости » Финансовый мир")
_IELinkClickByText($oIE, "Форекс и инвесторы » Финансовый мир")
_IELinkClickByText($oIE, "Недвижимость » Финансовый мир")


Но есть один минус если на странице присутствует 2-3 предложения то кликает по всем которые найдет )
Как бы это дело запретить? И заставить кликнуть только по 1 ссылке а именно по той которую первую найдет?
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
ssvih [?]
Поменяйте на:
Код:
Dim $aClick[7] = [6, 'Приобретение недвижимости в США » Финансовый мир', _
		'Прямые инвестиции » Финансовый мир', _
		'Недвижимость – таунхаус » Финансовый мир', _
		'Аренда коммерческой недвижимости » Финансовый мир', _
		'Форекс и инвесторы » Финансовый мир', _
		'Недвижимость » Финансовый мир']
For $i = 1 To $aClick[0]
	ConsoleWrite($aClick[$i] & @LF)
Next
 
Автор
S

ssvih

Новичок
Сообщения
35
Репутация
1
Спасибо madmasles +1 когда 24 часа выйдут )
Решение
Код:
Dim $aClick[7] = [6, 'Приобретение недвижимости в США » Финансовый мир', _
        'Прямые инвестиции » Финансовый мир', _
        'Недвижимость – таунхаус » Финансовый мир', _
        'Аренда коммерческой недвижимости » Финансовый мир', _
        'Форекс и инвесторы » Финансовый мир', _
        'Недвижимость » Финансовый мир']
For $i = 1 To $aClick[0]
   _IELinkClickByText($oIE, $aClick[$i])
Next

Вопрос обязательно объявлять переменную через Dim? А то у меня в коде куча переменных объявленных без Dim или Local ....
 

eropov

Jury
Сообщения
195
Репутация
25
Вопрос обязательно объявлять переменную через Dim? А то у меня в коде куча переменных объявленных без Dim или Local ....

Я РАНЬШЕ, КОГДА ТОЛЬКО НАЧИНАЛ ИСПОЛЬЗОВАТЬ AUTOIT ДЕКЛАРИРОВАЛ ТОЛЬКО Global(если это было нужно), сейчас я прописываю в шапке после инклюдов
Код:
Opt("MustDeclareVars", 1);С этой опцией все переменные должны быть явно объявлены с помощью Global, Local или Dim.
и декларирую каждую переменную по Global, Local.
 
Верх