Что нового

[Автоматизация] Клик по ссылке из элемента

iwak

Чайник
Сообщения
28
Репутация
0
Здравствуйте. Пытаюсь разобраться, как кликнуть по ссылке, содержащейся в определенном элементе.

Элемент выглядит как простой текст, внутри которого содержится ссылка.

Вот его код:

Код:
<span class="pointer" onclick="window.open('index.php?view=site&t=3cw6k27f0b2301035157ac146b37d2b0','_blank');">Automobily</span>
Знаю, что можно просто выполнить клик по тексту на странице сайта:
_IELinkClickByText($oIE, "Automobily")
После чего, как и положено, происходит переход по ссылке в таком формате:

www.site.com/index.php?view=site&t=3cw6k27f0b2301035157ac146b37d2b0

Но такой вариант не совсем подходит, так как текст по которому нужно выполнить клик неизвестен заранее.(Текст меняется каждый раз после входа на сайт). Так же, как неизвестна и эта область ссылки: "3cw6k27f0b2301035157ac146b37d2b0" - она так же меняется после входа на сайт.


Как в таком случае выполнить клик по ссылке?


Может получить текст из этой области:


Код:
<span class="pointer" onclick="window.open('index.php?view=site&t=3cw6k27f0b2301035157ac146b37d2b0','_blank');">ОБЛАСТЬ ТЕКСТА</span>
А затем кликнуть по найденому тексту на странице сайта?

_IELinkClickByText($oIE, "Найденный текст")


Или же возможно получить нужную часть ccылки из этой области:

Код:
<span class="pointer" onclick="window.open('ОБЛАСТЬ ССЫЛКИ,'_blank');">Automobily</span>
Полный код:

Код:
<div class="ad-block  " id="3cw6k27f0b2301035157ac146b37d2b0" style="margin-bottom:10px; ">
 <div class="ad-title">
  <span class="pointer" onclick="window.open('index.php?view=site&t=3cw6k27f0b2301035157ac146b37d2b0','_blank');">
   Automobily
  </span>
 </div>
Help. :'(
 

inververs

AutoIT Гуру
Сообщения
2 135
Репутация
462
Код:
$oIe.document.querySelector("div>span[class='pointer']").click()
 
Автор
I

iwak

Чайник
Сообщения
28
Репутация
0
inververs Спасибо.

Пример который вы привели хорошо работает, но после того, как будет выполнен один клик, нужно также выполнить клик по следующему поинтеру. Если использовать ту же самую команду, то скрипт выполняет клик по тому элементу, который уже был прокликан. Как в таком случае идентифицировать уже прокликаные ссылки, и кликнуть следующую?

Насколько я понимаю, можно использовать такое значение как .item(0) ; где 0 - это номер поинтера, по которому нужно кликнуть.

Но, возможно есть команда реализовать это проще?

Например, чтобы после клика по первому элементу item(0), выполнялся клик по следующему item(1) и так много раз?
 

alex33

Скриптер
Сообщения
1 451
Репутация
180
Я бы сделал так:
Код:
$oSpans = $oIE.document.getElementsByTagName("span")
If IsObj($oSpans) Then
	For $oSpan In $oSpans
		If $oSpan.className <> "pointer" Then ContinueLoop
		$oSpan.click()
	Next
EndIf

Или так (с использованием функций из библиотеки IE.au3):
Код:
$oSpans = _IETagNameGetCollection($oIE, "span")
If Not @error Then
	For $oSpan In $oSpans
		If $oSpan.className <> "pointer" Then ContinueLoop
		_IEAction($oSpan, "click")
	Next
EndIf
 
Автор
I

iwak

Чайник
Сообщения
28
Репутация
0
alex33 Благодарю.

И все таки, есть ли команда, позволяющая вытащить все тексты/ссылки из необходимых областей в коде со страницы.
Например вытащить текст

<span class="pointer" onclick="window.open('index.php?view=site&t=3cw6k27f0b2301035157ac146b37d2b0','_blank');">ОТСЮДА</span>

или ссылку

<span class="pointer" onclick="window.open('ВОТ ОТСЮДА','_blank');">Automobily</span>

Может это функция StringRegExp? Никак не могу с ней разобраться. Может подскажите хороший пример или урок с этой командой.

OffTopic:
Блин, я ещё столько всего не знаю :(
 

alex33

Скриптер
Сообщения
1 451
Репутация
180
iwak [?]
Может это функция StringRegExp? Никак не могу с ней разобраться. Может подскажите хороший пример или урок с этой командой.
Вот пример через Regexp. Кликни по названию функции и почитай.
Код:
Local $sStr, $sNewStr, $aRegexp
$sStr = '<span class="pointer" onclick="window.open(''index.php?view=site&t=3cw6k27f0b2301035157ac146b37d2b0'',''_blank'');">ОТСЮДА</span>'

; 1)
$aRegexp = StringRegExp($sStr, '<span[\s]+class="pointer".*?>(.*?)</span>', 3)
If Not @error Then $sNewStr = $aRegexp[0]
MsgBox(0, "new str 1", $sNewStr)

; 2)
$sNewStr = StringRegExpReplace($sStr, '<span[\s]+class="pointer".*?>(.*?)</span>', '$1')
MsgBox(0, "new str 2", $sNewStr)




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

А так, через объект html можно через innerHTML или innerTEXT или через getAttribute / setAttribute.
 
Верх