Что нового

Получение данных с html-страницы

K7A4

Новичок
Сообщения
18
Репутация
0
На HTML-странице есть следующий код:
Код:
<area href="build.php?id=1" coords="190,88,28" shape="circle" title="Лесопилка" alt="Лесопилка Уровень 9"
С помощью:
Код:
$oIE.document.querySelector('area[coords="190,88,28"]').click()
мне удается кликнуть в данную область и благополучно перейти по ссылке.
Однако мне никак не удается вытащить из указанного html-кода текстовые значения title ("Лесопилка") и alt ("Лесопилка Уровень 9"). Что-то типа:
Код:
MsgBox("", "", $oIE.document.querySelector('area[coords="190,88,28"]').getAttribute('title'))
выдает пустую строку.
Как написать правильно?

PS: описание аргумента "querySelector" я вроде нашел (ссылку на форуме), а вот описание доступных полей и методов ".document.querySelector()" - не нашел. Где можно об этом почитать?
Спасибо!
 

inververs

AutoIT Гуру
Сообщения
2,135
Репутация
465
Так и писать. Проверяйте в консоле браузера. Может быть таких элементов несколько, он находит первый и в нем нет title?
Все селекторы тут https://learn.javascript.ru/css-selectors
 
Автор
K

K7A4

Новичок
Сообщения
18
Репутация
0
inververs, спасибо за быстрый ответ. :smile:

1. Сейчас проверил поиском по вcему html - строка "190,88,28" точно уникальна. И, потом, - клик то работает!
2. Спасибо за ссылку, но я ее нашел на этом форуме. Там описаны селекторы, а вот поля и методы - вроде бы нет. :(
 

inververs

AutoIT Гуру
Сообщения
2,135
Репутация
465
А так?
Код:
$o = $oIE.document.querySelector('area[coords="190,88,28"]')
If IsObj($o) Then
	MsgBox(0,'title', $o.title)
	MsgBox(0,'outerHTML', StringRegExpReplace($o.outerHTML, '.*?title="(.*?)".*', '\1'))
Else
	MsgBox(0,'', 'Не найдено')
EndIf
 
Автор
K

K7A4

Новичок
Сообщения
18
Репутация
0
Выводит пустую строку,
или "<>" - если поменять на MsgBox(0,'', "<"&$o.title&">")

Второй MsgBox выдает:
<area href="build.php?id=1" coords="190,88,28" shape="circle" alt="Лесопилка Уровень 9">

Да! Alt выдает, а вот title почему то нет.
 

inververs

AutoIT Гуру
Сообщения
2,135
Репутация
465
А ну ка напиши что выдает:
Код:
MsgBox(0,'outerHTML', $o.outerHTML)



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

K7A4 [?]
Да! Alt выдает, а вот title почему то нет.
Догадайся с 3 раз почему.
 
Автор
K

K7A4

Новичок
Сообщения
18
Репутация
0
Тоже самое:
<area href="build.php?id=1" coords="190,88,28" shape="circle" alt="Лесопилка Уровень 9">

Сорри, я на самом деле очень сильно урезал содержимое title в html.
Там на самом деле очень-очень длинный текст.
Код:
<area href="build.php?id=1" coords="190,88,28" shape="circle" title="Woodcutter &lt;span class=&quot;level&quot;&gt;Level 7&lt;/span&gt;||Cost for upgrading building to level 8:&lt;br /&gt;
					&lt;div class=&quot;showCosts&quot;&gt;
				&lt;span class=&quot;resources r1&quot;&gt;
				&lt;img class=&quot;r1&quot; src=&quot;img/x.gif&quot; /&gt;1450
				&lt;/span&gt; 
				&lt;span class=&quot;resources r2&quot;&gt;
				&lt;img class=&quot;r2&quot; src=&quot;img/x.gif&quot; /&gt;3625
				&lt;/span&gt; 
				&lt;span class=&quot;resources r3&quot;&gt;
				&lt;img class=&quot;r3&quot; src=&quot;img/x.gif&quot; /&gt;1810
				&lt;/span&gt; 
				&lt;span class=&quot;resources r4&quot;&gt;
				&lt;img class=&quot;r4&quot; src=&quot;img/x.gif&quot; /&gt;2175
				&lt;/span&gt; &lt;div class=&quot;clear&quot;&gt;&lt;/div&gt;" alt="Woodcutter Level 7"/>
 

inververs

AutoIT Гуру
Сообщения
2,135
Репутация
465
А браузер этот title отображает? Первый раз такое вижу, какой то г. код. Если не получиться извлекать, то бери атрибут alt.
Woodcutter Level 7 - можно понять что это лесопилка.
 
Автор
K

K7A4

Новичок
Сообщения
18
Репутация
0
Да, отображает:
Во всплывающем окне пишет:
"Woodcutter Level 7
Cost for upgrading building to level 8:"
и в третьей строке 4 числа в промеж с минипиктограмками ресурсов.

PS: не обращайте внимание на то, что текст то на русском, то на английском - это с разных сайтов одной игры - html у них идентичный, за исключением языка текста для пользователя.
 
Автор
K

K7A4

Новичок
Сообщения
18
Репутация
0
вложением
 

Вложения

  • AI2.png
    AI2.png
    120.4 КБ · Просмотры: 21

inververs

AutoIT Гуру
Сообщения
2,135
Репутация
465
а вот оно как. Не знаю чего оно не показывает title, все должно работать. У меня находит.
Посмотрите в DOM (F12 - проводник DOM.) браузера, найдите этот элемент и смотрите, остался ли там title
 
Автор
K

K7A4

Новичок
Сообщения
18
Репутация
0
Вот что я осилил (см. прикрепленный файл ниже).




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

Сорри, а как в коде html чуть ниже:
Код:
<div id="village_map" class="f3">
                    <div class="level colorLayer good gid1 level7" style="left: 179px; top:78px;">
                        <div class="labelLayer">7</div>
                    </div>
                    <div class="level colorLayer good gid4 level7" style="left: 269px; top:79px;">
                        <div class="labelLayer">7</div>
                    </div>
по значению поля style ("left: 179px; top:78px;") найти значение class ("level colorLayer good gid1 level7")?
Я попробовал
Код:
MsgBox("", "", $oIE.document.querySelector('[style="left: 179px; top:78px;"]').className)
и аналогичные - не работают.

Еще раз спасибо!
 

Вложения

  • AI3.png
    AI3.png
    15 КБ · Просмотры: 15

inververs

AutoIT Гуру
Сообщения
2,135
Репутация
465
K7A4 [?]
и аналогичные - не работают.
Все работает.



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

Было area а стало div? Значит ищите информацию в этих div. А вот это <area href="build.php?id=1".... вы доставали из исходного кода страницы? Не нужно, исходный код - это сырые данные, их только для регулярок хорошо. Если работаете через объекты, то всегда смотрите Проводник DOM в Средствах разработчика (F12).
 
Автор
K

K7A4

Новичок
Сообщения
18
Репутация
0
Я все доставал из исходного кода страницы (CTRL+U в IE).
Но я думал, что querySelector работает именно с этими данными.
Сейчас буду разбираться с Проводником DOM'а.

PS: могу привести полный скрипт для доступа на данную html-страницу - он не такой большой.
Только логин и пароль от аккаунта в Приват скину.
Код:
$Login = ""
$Password = ""
#include <GUIConstants.au3>
#include <IE.au3>
GUICreate("", 640, 480, -1, -1, BitOR($WS_OVERLAPPEDWINDOW, $WS_CLIPSIBLINGS, $WS_CLIPCHILDREN), $WS_EX_COMPOSITED)
$oIE = _IECreateEmbedded()
GUICtrlCreateObj($oIE, 0, 0, 640, 480)
_IENavigate($oIE, "http://tx3.travian.co.za")
GUISetState()

$oForm   = _IEFormGetObjByName($oIE, "login")
$Elem = _IEFormElementGetObjByName($oForm, "name")
_IEFormElementSetValue($Elem, $Login)
$Elem = _IEFormElementGetObjByName($oForm, "password")
_IEFormElementSetValue($Elem, $Password)
Sleep(2000)
_IEFormSubmit($oForm, 1)
_IELoadWait($oIE)
Sleep(1000)

MsgBox("", "", $oIE.document.querySelector('[style="left: 179px; top:78px;"]').className) ;Выдает пустоту (

Sleep(10000)



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

Посмотрел через проводник - там какой-то динамический код.
Он постоянно меняется, если водить мышкой по игровому экрану.
Видимо из-за скриптов.
Как в такой ситуации лучше поступить (как работать с этим кодом)?
 

inververs

AutoIT Гуру
Сообщения
2,135
Репутация
465
Не пользуюсь _IECreateEmbedded(), т.к это не браузер, а WebControl, не понятно какие у него API и в каком режиме он работает. Вообще удивляюсь что там querySelector работает.
 
Автор
K

K7A4

Новичок
Сообщения
18
Репутация
0
Я разобрался почему у меня не искало.
Я искал
"[style="left: 179px; top:78px;"]"
а Вы искали:
"[style="left: 179px; top: 78px;"]"

Я брал свою подстроку из CTRL+U IE, а Вы, видимо, из Проводника DOM.
Почему то откуда то добавляется один пробел (перед 78px) - из-за этого у меня и не искало!
Правда я не понимаю все же - откуда это? :(
 
Автор
K

K7A4

Новичок
Сообщения
18
Репутация
0
inververs, хорошо, спасибо!

И все же, возвращаясь к коду:
Код:
<div class="f3" id="village_map">
                    <div class="level colorLayer notNow gid1 level7" style="left: 179px; top: 78px;">
                        <div class="labelLayer">7</div>
                    </div>
Скрипт
Код:
MsgBox("", "", $oIE.document.querySelector('[style="left: 179px; top: 78px;"]').className)
выдает "level colorLayer notNow gid1 level7".
Скрипт
Код:
MsgBox("", "", $oIE.document.querySelector('[style="left: 179px; top: 78px;"]').ParentNode.className)
выдает "f3".
А вот скрипт
Код:
MsgBox("", "", $oIE.document.querySelector('[style="left: 179px; top: 78px;"]').FirstChild.className)
не выдает "labelLayer" (вместо этого как всегда - пустота).
Что у меня не так?
 

inververs

AutoIT Гуру
Сообщения
2,135
Репутация
465
Код:
MsgBox("", "", $oIE.document.querySelector('div[style="left: 179px; top: 78px;"] > div').className)
 
Верх