Что нового

Получение числа со страницы браузера

Evochka Turkova

Новичок
Сообщения
39
Репутация
0
Я не совсем уверена что такое можно реализовать :IL_AutoIt_1: , но все же попробую. Есть такие данные на странице браузера:

Код:
<div id="item4">
<div class="leftin">Число:</div>
<div class="rightin">444 </div>
</div>

<div id="item5">
<div class="leftin">Число:</div>
<div class="rightin">555 </div>
</div>

можно ли получить число 555 (число может меняться, но есть id item5, который никогда не меняется) и вставить его так, чтобы Global $aAmount указывал это число.

Код:
Global $aAmount[] = "Тут должно указываться число, полученное со страницы браузера"
 

alex33

Скриптер
Сообщения
1,457
Репутация
186
Evochka Turkova сказал(а):
Я не совсем уверена что такое можно реализовать
:D :D :D Вы меня насмешили :smile:

Код:
Global $aAmount[1]
$oDiv1 = _IEGetObjById($oIE, "item5")
$oDivs = _IETagNameGetCollection($oDiv1, "div")
If IsObj($oDivs) Then
For $oDiv In $oDivs
If $oDiv.Classname = "rightin" Then
$aAmount[0] = StringStripWS($oDiv.innerTEXT, 8)
ExitLoop
EndIf
Next
EndIf
MsgBox(0, "число", $aAmount[0])
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
Evochka Turkova [?]
можно ли получить число 555 (число может меняться, но есть id item5, который никогда не меняется)
Код:
Global $aAmount[1]
;...
$oEl = _IEGetObjById($oIE, 'item5')
$aAmount[0] = $oEl.lastChild.innerText
;...
 

alex33

Скриптер
Сообщения
1,457
Репутация
186
Garrett, Ваш вариант выглядит красиво, но у меня он не работает... :(
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
alex33 [?]
Ваш вариант (как он есть), тоже не работает! ;D


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

Нужно вначале получить объект Document, а уже потом обращаться к DOM.
 

alex33

Скриптер
Сообщения
1,457
Репутация
186
У меня моё работает :smile:
Код:
#include <IE.au3>
$oIE = _IECreate(@ScriptDir&"\2.html")
Global $aAmount[1]
$oDiv1 = _IEGetObjById($oIE, "item5")
$oDivs = _IETagNameGetCollection($oDiv1, "div")
If IsObj($oDivs) Then
For $oDiv In $oDivs
If $oDiv.Classname = "rightin" Then
$aAmount[0] = StringStripWS($oDiv.innerTEXT, 8)
ExitLoop
EndIf
Next
EndIf
MsgBox(0, "число", $aAmount[0])
Код:
<!DOCTYPE HTML>
<html>
 <head>
  <meta charset="utf-8">
  <title>div2</title>
 </head>
 <body>  
 
<div id="item4">
<div class="leftin">Число:</div>
<div class="rightin">444 </div>
</div>

<div id="item5">
<div class="leftin">Число:</div>
<div class="rightin">555 </div>
</div>

 </body>
</html>
P.S. Для удобства получение числа можно обернуть код в функцию...
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
Мой вариант рабочий.
 
Автор
E

Evochka Turkova

Новичок
Сообщения
39
Репутация
0
alex33 появилась проблема, число изменилось и перед числом появился лишний знак # и он тоже копируется :'( :'(

Код:
<div id="item4">
<div class="leftin">Число:</div>
<div class="rightin">#444.44 </div>
</div>

<div id="item5">
<div class="leftin">Число:</div>
<div class="rightin">#555.55 </div>
</div>

Можно ли как-то отфильтровать #
 

erlik

Продвинутый
Сообщения
317
Репутация
84
Ну и для полноты коллекции способов "как сделать одно и тоже, но как можно более изощреннее" моя лепта:
Код:
#include <IE.au3>
$oIE   = _IECreate(@ScriptDir&"\test.html")
$oDoc  = _IEDocGetObj($oIE)
$oDiv1 = _IEGetObjById($oIE, "item5")
$oElements = $oDiv1.getElementsByClassName('rightin')
;ConsoleWrite($oElements.length)
If IsObj($oElements)  Then
    For $oEl In $oElements
        ConsoleWrite(StringRegExpReplace($oEl.InnerText, "[#\s]", ""))
    Next
EndIf
 
Автор
E

Evochka Turkova

Новичок
Сообщения
39
Репутация
0
Попыталась обьединить 2 скрипта:

Код:
$oDiv1 = _IEGetObjById($oIE, "item5")
   $oDivs = _IETagNameGetCollection($oDiv1, "div")
	  If IsObj($oDivs) Then
	  For $oDiv In $oDivs
		 If $oDiv.Classname = "rightin" Then
		 $aAmount[0] = StringRegExpReplace($oDiv.InnerText, "[#\s]", "")
		 ExitLoop
		 EndIf
	  Next
	  EndIf


Символ # все равно копируется ..... :stars:


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

Решила проблему с помощью:

Код:
$aAmount[0] = StringRegExpReplace($oDiv.InnerText, "[#\$9]", "")


:laugh: :laugh: :laugh: :laugh:

Всем спасибо!!!!!
 

alex33

Скриптер
Сообщения
1,457
Репутация
186
Код:
$aAmount[0] = StringRegExpReplace($oDiv.innerTEXT, "(?si)([^0-9.]+)", "")

P.S. У меня работает.
 

erlik

Продвинутый
Сообщения
317
Репутация
84
Странный, конечно, regexp у вас, Evochka Turkova, получился... В общем, если идти правильным путем, то можно еще так:
Код:
StringRegExpReplace($oDiv.InnerText, "[^\d.]", ""); убираем любые символы, кроме цифр и точки.
 

alex33

Скриптер
Сообщения
1,457
Репутация
186
erlik, Ну как у меня, только \d вместо [0-9]
 
Верх