Что нового

Работа с html страничкой в IE

kartrid

Новичок
Сообщения
5
Репутация
2
Всем привет!

Вчера познакомился с AutoIt и пребываю в восторге до сих пор от тех небольших моментов, которые мне удалось автоматизировать за последние несколько часов.

Очередная загвоздка:

При работе в интернете через соксы необходимо переодически их менять, для чего требуется зайти на сайт с соксами и взять нужный, вот что я уже наваял:

Код:
Global $oForm
#include <IE.au3>
$oIE = _IECreate ("http://admin.soxx.biz/")
$oForm   = _IEFormGetCollection($oIE,0)
$oLogin  = _IEFormElementGetObjByName($oForm,"user")
$oPass   = _IEFormElementGetObjByName($oForm,"pass")
_IEFormElementSetValue($oLogin,"******")
_IEFormElementSetValue($oPass,"******")
_IEFormSubmit($oForm)
_IENavigate ($oIE,"http://admin.soxx.biz/cgi-bin/online.cgi?country=US:430")


далее на странице есть форма с таблицей

<tr align="center">
<td bgcolor="#70E6E8">
1
</td>
<td height="15" bgcolor="#70E6E8">
<a href="javascript:showinfo('/cgi-bin/online.cgi?action=showwin&pid=1301115566');">...0-149.dsl.l.sbcglobal.net</a>
</td>
<td bgcolor="#70E6E8">
United States
</td>
<td bgcolor="#70E6E8">
CA
</td>
<td bgcolor="#70E6E8">
South Gate
</td>
<td bgcolor="#70E6E8">
network
</td>
<td bgcolor="#70E6E8">
23h:27m:21s
</td>
<td bgcolor="#70E6E8">
0m:22s ago
</td>
<td bgcolor="#70E6E8">
2s
</td>
</tr>

заголовок таблицы:
N HostName Country St. City Connect Uptime Last check Speed

таких строчек около 20 и 20 страниц с такими строчками, в результате нужно кликнуть на 2-ую колонку выбранной строчки

выбор строчки осуществляется следующим образом:
1. первая колонка (N) не должна быть закрашена в красный цвет (сокс уже использовано)
2. колонка St. должна быть определенная
3. Speed не выше 3

помогите плиз или направте в нужное русло
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
kartrid [?]
в результате нужно кликнуть на 2-ую колонку выбранной строчки

Клик по ссылки предполагает переход на новую страницу, или появляется pop up окно с которым тоже нужно произвести какие-нибудь действия?

выбор строчки осуществляется следующим образом:1. первая колонка (N) не должна быть закрашена в красный цвет (сокс уже использовано)2. колонка St. должна быть определенная3. Speed не выше 3

Критерий поиска статичный или динамичный?
В частности интересует St?
Поясню. У вас написано: определённая! Кто и что её определяет, и какая она может быть (значение поиска)?

Если можете, опишите как можно полнее вашу задачу, от начала и до результата, который должен быть получен.
И если есть возможность, выложите полный HTML код страницы (как есть) с которой нужно работать.

Есть кое-какие намётки, как вам помочь, но возникают вопросы. Поэтому нужно как можно больше информации, для решения именно вашей задачи.
 
Автор
K

kartrid

Новичок
Сообщения
5
Репутация
2
адрес страницы: admin.soxx.biz/cgi-bin/online.cgi?order=0&city=&page=1&country=US:549

первые две строчки


N

HostName

Country

St.

City

Connect

Uptime

Last check

Speed

1

...**-28-205-135.client.mchsi.com

United States

IL

Moline

network

23h:23m:59s

0m:59s ago

1s


таких строчек на странице 30, в первой колонке использованные соксы закрашены красным цветом, то бишь допустим в случае если первый сокс занят, такие строчки пропускаем и переходим к следующей.

далее допустим нам нужен штат Иллинойс IL, если 4 колонка не IL тоже переходим на следующую

далее последняя колонка Speed если выше 4s переходим на следующюю

Если не перешли, то кликаем на ссылку во второй колонке ...**-28-205-135.client.mchsi.com

Вот собственно и все.

далее целиком код страницы до 3-его сокса ибо дальше все идентично

<HTML><HEAD><TITLE>Socks Admin v.1.2.11</TITLE></HEAD><BODY BGCOLOR="#FFFFFF" MARGINWIDTH="0" MARGINHEIGHT="5" topmargin="5" rightmargin="0" leftmargin="0">
<font size=6 color="#00AFAF"><center>Socks Admin v.1.2.11</center></font>

<font size=3 color="#000000">
<style>
td { font-family : Verdana, Geneva, Arial, Helvetica, sans-serif; font-size : 10px; }
td.small { font-size : 10px; }
A:hover { color: "gray"; text-decoration : underline; }
A:link { color: "#000000"; text-decoration: none; }
A:visited { color: "#000000"; text-decoration: none; }
img { border-color: "#004C99"; }
</style>

<script type="text/javascript">
<!--
function showinfo(sURL){
sw = screen.width;
sh = screen.height;
wh = 254;
ww = 350;
sw = (sw - ww) / 2;
sh = (sh - wh) / 2;
var sCode = 'center=Yes,help=No,scroll=No,resizable=No,status=No,Height='+wh+',Width='+ww+',left='+sw+',top='+sh;
rv = window.open( sURL, null, sCode);
}
function c(proxyline){
document.selecter.proxy.value = proxyline;
document.selecter.proxy.select();
document.execCommand("copy");
document.selecter.proxy.value = "";
}
function td(idname)
{
obj = document.getElementById(idname);
if (obj) {
if (obj.style.display == "none") {
obj.style.display = "";
} else {
obj.style.display = "none";
}
}
return false;
}
//-->
</script>

<center>

<table border=0 cellpadding=0 cellspacing=0 width="100%"><tr valign="top"><td align="left">

<FORM name="selecter">
<table width=770 align=center border=0 bgcolor=White cellpadding=0 cellspacing=0><tr><td><table width=770 border=0 cellpadding=0 cellspacing=1><tr align="center"><td bgcolor="#5DBFC1" colspan="9" height="20"> <b>[tariff: PerUse 5] time: 31/01/2010 20:55:00 | there are 513 socks online at this moment [<a href=/cgi-bin/online.cgi?action=getcountrys>custom</a> | <a href=/cgi-bin/online.cgi?page=1&order=0>get all</a> | <a href="/cgi-bin/online.cgi?action=show24h">24h list</a> | <a href="/cgi-bin/login.cgi">main menu</a>]
Sorted by country: US </b>
</td>
</tr>
<tr align="center">
<td bgcolor="#62CACC" height="20">
<b>N</b>
</td>
<td bgcolor="#62CACC" width="200">
<b><a href="/cgi-bin/online.cgi?order=1&page=1&country=US:549&city=">HostName</a></b>
</td>
<td bgcolor="#62CACC" width="130">
<b><a href="/cgi-bin/online.cgi?order=2&page=1&country=US:549&city=">Country</a></b>
</td>
<td bgcolor="#62CACC">
<b><a href="/cgi-bin/online.cgi?order=3&page=1&country=US:549&city=">St.</a></b>
</td>
<td bgcolor="#62CACC" width="100">
<b><a href="/cgi-bin/online.cgi?order=4&page=1&country=US:549&city=">City</a></b>
</td>
<td bgcolor="#62CACC">
<b><a href="/cgi-bin/online.cgi?order=5&page=1&country=US:549&city=">Connect</a></b>
</td>
<td bgcolor="#62CACC">
<b><a href="/cgi-bin/online.cgi?order=0&page=1&country=US:549&city=">Uptime</a></b>
</td>
<td bgcolor="#62CACC">
<b>Last check</b>
</td>
<td bgcolor="#62CACC">
<b><a href="/cgi-bin/online.cgi?order=6&page=1&country=US:549&city=">Speed</a></b>
</td>
</tr>

<tr align="center">
<td bgcolor="#70E6E8">
1
</td>
<td height="15" bgcolor="#70E6E8">
<a href="javascript:showinfo('/cgi-bin/online.cgi?action=showwin&pid=3068096344');">...**-28-205-135.client.mchsi.com</a>
</td>
<td bgcolor="#70E6E8">
United States
</td>
<td bgcolor="#70E6E8">
IL
</td>
<td bgcolor="#70E6E8">
Moline
</td>
<td bgcolor="#70E6E8">
network
</td>
<td bgcolor="#70E6E8">
23h:23m:59s
</td>
<td bgcolor="#70E6E8">
0m:59s ago
</td>
<td bgcolor="#70E6E8">
1s
</td>
</tr>

<tr align="center">
<td bgcolor="#6CDFE1">
2
</td>
<td height="15" bgcolor="#6CDFE1">
<a href="javascript:showinfo('/cgi-bin/online.cgi?action=showwin&pid=3068070220');">***</a>
</td>
<td bgcolor="#6CDFE1">
United States
</td>
<td bgcolor="#6CDFE1">
TN
</td>
<td bgcolor="#6CDFE1">
Medina
</td>
<td bgcolor="#6CDFE1">
network
</td>
<td bgcolor="#6CDFE1">
23h:17m:57s
</td>
<td bgcolor="#6CDFE1">
0m:59s ago
</td>
<td bgcolor="#6CDFE1">
3s
</td>
</tr>

<tr align="center">
<td bgcolor="#70E6E8">
3
</td>
<td height="15" bgcolor="#70E6E8">
<a href="javascript:showinfo('/cgi-bin/online.cgi?action=showwin&pid=3068096398');">...1-204-13-3.hsd1.ga.comcast.net</a>
</td>
<td bgcolor="#70E6E8">
United States
</td>
<td bgcolor="#70E6E8">
GA
</td>
<td bgcolor="#70E6E8">
Atlanta
</td>
<td bgcolor="#70E6E8">
network
</td>
<td bgcolor="#70E6E8">
23h:16m:59s
</td>
<td bgcolor="#70E6E8">
0m:59s ago
</td>
<td bgcolor="#70E6E8">
2s
</td>
</tr>
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
Я не ради праздного любопытства вас просил:

Garrett [?]
Если можете, опишите как можно полнее вашу задачу, от начала и до результата, который должен быть получен.

Из выше написанного вами ответа я понял, что вам важно при первом совпадение перейти по ссылки, и всё.
Тогда вот, попробуйте.

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

; здесь код авторизации
; ...

; Dim $sUrl = "http://domain.lan/test.html" ; url для теста.
Dim $sUrl = _IEPropertyGet($oIE, "locationurl") ; после входа в admin-панель в этой переменой $sUrl адрес страницы, с которой работаем.
Dim $sColor = "#ff0000" ; искомый цвет
Dim $sParam_1 = "IL"    ; искомое значение 1
Dim $sParam_2 = "4"     ; искомое значение 2

$oIE = _IECreate($sUrl,0,1,1,1)
_IETableGetCollection($oIE)

For $iTIndex = 0 To @extended -1
	$oTables = _IETableGetCollection($oIE,$iTIndex)
	$aTable = _IETableWriteToArray($oTables,True)
	
	If UBound($aTable,2) = 9 Then
		_IETagNameGetCollection($oTables,"tr")
		For $iTRIndex = 0 To @extended -1
			$oTR = _IETagNameGetCollection($oTables,"tr",$iTRIndex)
			$oTD = _IETagNameGetCollection($oTR,"td",0)
			
			If $oTD.bgcolor <> $sColor And StringReplace($aTable[$iTRIndex][3], " ", "") = $sParam_1 And $sParam_2 > StringReplace($aTable[$iTRIndex][8], " ", "") Then
				; мониторим найденные ссылки
				; ConsoleWrite( "Table Index: ["& $iTIndex &"]  Line ID: ["& $oTD.innertext &"] Click on the link: "& $aTable[$iTRIndex][1] &@CRLF)
				; совпадение найдено, кликаем
				_IELinkClickByText($oIE, StringReplace($aTable[$iTRIndex][1]," ",""))
				 Exit
			EndIf			 
		Next
	EndIf
Next
 
Автор
K

kartrid

Новичок
Сообщения
5
Репутация
2
Работа с объектами IE оказалась для меня неподъемной, поэтому я решил пойти другим путем.

Сохраняю хтмл в текстовый файл, обрабатываем его - находим текст нужной ссылки и кликаем на него, но тут оказалось что ссылка закрыта яваскриптом и функция _IELinkClickByText отказывается работать

Код:
Global $oForm, $link=""
#include <Constants.au3>
#include <IE.au3>
#include <Array.au3>
$oIE = _IECreate ("http://admin.soxx.biz/")
$oForm   = _IEFormGetCollection($oIE,0)
$oLogin  = _IEFormElementGetObjByName($oForm,"user")
$oPass   = _IEFormElementGetObjByName($oForm,"pass")
_IEFormElementSetValue($oLogin,"***")
_IEFormElementSetValue($oPass,"***")
_IEFormSubmit($oForm)
$oIE = _IECreate ("http://admin.soxx.biz/cgi-bin/online.cgi?order=0&city=&page=1&country=US:411")
$sText = _IEBodyReadText ($oIE)
FileWrite("C:\Downloads\soxx.txt",$sText)
for $i=1 to 20
$str=FileReadLine("C:\Downloads\soxx.txt",$i)
if StringInStr($str,"United States") And StringInStr($str," FL ") And StringInStr($str,"network") then $link=stringmid($str,4,12)
Next 
MsgBox(0,"",$link)
$link="...-26-45-139.hsd1.fl.comcast.net"
$oIE = _IECreate ("http://admin.soxx.biz/cgi-bin/online.cgi?order=0&city=&page=1&country=US:411")
$r=_IELinkClickByText("",$link)
MsgBox(0,"",$r)
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
С чего вы взяли что
kartrid сказал(а):
ссылка закрыта яваскриптом и функция _IELinkClickByText отказывается работать
Все прекрасно работает :smile: JavaScript тут не причём.
Вот тому подтверждение.
 
Автор
K

kartrid

Новичок
Сообщения
5
Репутация
2
какая-то мистика

так не запускается
_IELinkClickByText($oIE,$link)

так запускается
_IELinkClickByText($oIE,"...-118-137.sip.bct.bellsouth.net")

причем выдаю msgbox-ом $link он равен точь в точь ...-118-137.sip.bct.bellsouth.net

+ даже напрямую _IELinkClickByText($oIE,"...-118-137.sip") не запускает, если часть текста ссылки указать, а не весь
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
kartrid сказал(а):
какая-то мистика

так не запускается
_IELinkClickByText($oIE,$link)

Вот так, кликнет :smile:
Код:
_IELinkClickByText($oIE,StringReplace($link," ",""))


Не забывайте про пробелы, табуляцию и перенос строки это тоже знаки и их нужно учитывать!

kartrid сказал(а):
+ даже напрямую _IELinkClickByText($oIE,"...-118-137.sip") не запускает, если часть текста ссылки указать, а не весь

Просто такого текста нет на странице. В таком случае помогут регулярные выражения.
 
Верх