Что нового

[Автоматизация] Не получается сохранить капчу

tihov

Новичок
Сообщения
13
Репутация
0
Скажу сразу что тему http://autoit-script.ru/index.php/topic,1512.0.html читал и решение брал там.
Код страницы
Код:
<form name="PostForm" method="post" action="/dyn/sendmail.html" enctype="multipart/form-data">
<input type=hidden name=do_it>
<input type=hidden name=mid value="18109267">

<input type=hidden name=path value="talks">


<div align="center">Если автор ответит на указанный Вами e-mail, в дальнейшем Вы сможете общаться с ним напрямую.</div>





<table align="center" cellpadding="3" bgcolor="#eeeeee">

<tr><th colspan="2"><big>Отправить личное сообщение</big></th></tr>

<tr><td colspan="2"><hr width="75%" noshade></td></tr>

<tr>
	<td align="right"><big><b>Ваше имя:</b></big></td>
	<td><input type=text name="author" value="Алексей" size="25" maxlength="20" ></td>
</tr>

<tr>
	<td align="right"><big><b>Ваш e-mail:</b></big></td>
	<td><input type=text name="email" value="[email protected]" size="25"  ></td>
</tr>

<tr>
	<td align="right"><big><b>Тема:</b></big></td>
	<td><input type=text name="subject" value=" пригласим двух актов сейчас" size="25"  ></td>
</tr>

<tr><td colspan="2" align="center">
	<big><b>Сообщение:</b></big>

	<textarea name="message" rows=15 cols=50 >&gt; 25 178 68 
&gt; 28 170 58</textarea>

	

	Прикрепить файлы:

	<input type="file" name="file1">

	<input type="file" name="file2">

	<input type="file" name="file3">
</td></tr>

<tr><td colspan="2" align="center">
	
<small>Подтвердите, что Вы не робот, введя 4 цифры, которые Вы видите на картинке:</small>

	<img src="/bbsx.perl/action/Zen/Roboproof/draw.jpg" vspace="0" border="1">
<input type=text name="roboproof" value="" size="10"  >
</td></tr>

<tr><td colspan="2" align="center">
	<input type="submit" onclick="var f = document.forms['PostForm']; f.do_it.value='1'; this.disabled = true; f.submit();" value="Послать сообщение">
</td></tr>

</table>

</form>

Код:
_LoadCaptcha()

Func _LoadCaptcha() ; Загружаем и сохраняем картинку
	$oForm = _IEFrameGetObjByName ($oIE, "PostForm")
    $oInputs = _IETagNameGetCollection ($oForm, "img")

    For $oInput In $oInputs
        $oInput.src
    Next
    InetGet($oInput.src, @ScriptDir &"\draw.jpg", 1)
	
EndFunc


Что делаю не так ?( Сохраняется картинка 0 байт
 

inververs

AutoIT Гуру
Сообщения
2,135
Репутация
465
Код не правильный и бесполезный.
Код:
For $oInput In $oInputs
        $oInput.src
Next
    InetGet($oInput.src, @ScriptDir &"\draw.jpg", 1)
это все надо переделать.
 

inververs

AutoIT Гуру
Сообщения
2,135
Репутация
465
Функция _IETagNameGetCollection возвращает коллекция тэгов, вы тут сделали правильно.
Дальше нужно пройти по этой коллекции и найти в ней конкретный элемент, вы только сделали проход по коллекции.
Код:
For $oInput In $oInputs
Next

Но нужно как то указать, с каким элементом работать. Например, можно найти такую картинку, в источнике которой будет Roboproof. Делаете так:
Код:
Local $sCapchaURL
For $oInput In $oInputs
	If StringInStr($oInput.src,'Roboproof') Then
		$sCapchaURL = $oInput.src
		ExitLoop ;т.к элемент уже определен, то выходим из цикла перебора.
	EndIf
Next

Теперь пробуйте качать
Код:
InetGet($sCapchaURL, @ScriptDir &"\draw.jpg", 1)

Но можт быть такая ситуация, что полученная картинка будет отличатся от той, что вы видете в браузере. Тогда вам нужно будет к $sCapchaURL добавить дополнительным параметром куки из текущей сессии.
 
Автор
T

tihov

Новичок
Сообщения
13
Репутация
0
Спасибо, стало намного понятней, но выдает ошибку.

Тег картинки
Код:
<img src=?"/?bbsx.perl/?action/?Zen/?Roboproof/?draw.jpg" vspace=?"0" border=?"1">?<img src="/bbsx.perl/action/Zen/Roboproof/draw.jpg" vspace="0" border="1">

Как найти именно эту картинку ?

И вопрос по коду
Код:
InetGet($sCapchaURL, @ScriptDir &"\draw.jpg", 1)


Нельзя ли копировать картинку прямо из браузера ? Ведь при новом обращении, будет новая картинка.
 

inververs

AutoIT Гуру
Сообщения
2,135
Репутация
465
tihov [?]
Нельзя ли копировать картинку прямо из браузера ?
Можно, для этого нужно разрешить в настройках браузера работу с буфером обмена.


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

tihov [?]
Как найти именно эту картинку ?
Вы должны понять, чем эта картинка отличается от всех остальных. Можно сделать проще, обратиться к картинке по индексу, например: _IEImgGetCollection($oForm,0)
 
Автор
T

tihov

Новичок
Сообщения
13
Репутация
0
Можно, для этого нужно разрешить в настройках браузера работу с буфером обмена.
Какими функциями пользоваться для работы с буфером обмена ?
 

Trans

Знающий
Сообщения
257
Репутация
6
когда-то пользовался таким методом
Код:
Func _Capt()
    $doc=_IEDocGetObj($oIE)
  InetGet("http://site.ru/captcha.php" & $doc.cookie,@scriptDir& "\body.jpg",1)
EndFunc

Надеюсь что будет работать
 
Автор
T

tihov

Новичок
Сообщения
13
Репутация
0
Пробовал по id картинки - не получается, так же перебирал id
Код:
_IEImgGetCollection($oForm,0)


Вариант с куками (правда не понимаю как он работает, ведь происходит все равно новое обращение). Возвращает картинку уже не пустую, но не открывается.
Код:
Func _Capt()
    $doc=_IEDocGetObj($oIE)
  InetGet("http://site.ru/captcha.php" & $doc.cookie,@scriptDir& "\body.jpg",1)
EndFunc


С библиотекой Clipboard.au3 мне кажется совсем рано связываться, но попробовал) ошибка (видимо не правильно указал дескриптор окна).

Вопрос открыт, помогите плз.

Сильно задумываюсь написать мануал в интуитивном виде по использованию языка для автоматизации работы с интернет. Сам разберусь нормально и другие не будут мучиться. Но кому-то надо и мне разъяснить :smile: буду собирать все что знаю по темам, далее нужно будет корректировать, говорить что добавить, показывать от куда заполнять пустые места.
Есть желающие ? Думаю это будет полезным трудом.
Прочитав ни один раз большинство тем и описание языка, тем не менее не сформировалось какое-то устойчивое представление, думаю я не один.

Найдется хотя бы один желающий помочь с мануалом ? Напишите в личку.
 

inververs

AutoIT Гуру
Сообщения
2,135
Репутация
465
А что за сайт, дайте к нему доступ и покажите какую капчу нужно скачать.
 

inververs

AutoIT Гуру
Сообщения
2,135
Репутация
465
На той странице с объявлением, пожалуй самый простейший случай с капчей. Вот так бы я делал.
Код:
#include <ie.au3>
$oIe = _IEAttach('www.rostov-don.ru','url')
$oImgs = _IEImgGetCollection($oIe)
Local $sURL = ''
For $oImg In $oImgs
	If StringInStr($oImg.src,'ant_plevok.cgi?se=') Then
		$sURL = $oImg.src
		ExitLoop
	EndIf
Next
If $sURL Then
	InetGet($sURL,'capcha.jpg',1)
Else
	ConsoleWrite('Изображение по указанным критериям не найдено.' & @LF)
EndIf
 
Автор
T

tihov

Новичок
Сообщения
13
Репутация
0
Спасибо, на примере работает, получает другую картинку но с теми же цифрами.

Что делать если картинка приходит 0 байт (это на других сайтах) ?
Вариантами выше получалась не пустая картинка, но не отображается.
 

inververs

AutoIT Гуру
Сообщения
2,135
Репутация
465
Если ноль байт, то ничего не скачалось.
В каждом случаее надо разбираться отдельно.
 
Автор
T

tihov

Новичок
Сообщения
13
Репутация
0
А как этот же вариант решить с помощью библиотеки Clipboard.au3 ?
Думаю в этом случае получу именно ту картинку что нужно.
 

defens

Знающий
Сообщения
89
Репутация
5
inververs
если делать как в последнем вашем примере то картинка сохраняется другая, хотя на сайте она не перезагружалась.

Код:
$oImgs = _IEImgGetCollection($oIe)
Local $sURL = ''
For $oImg In $oImgs
    If StringInStr($oImg.src,'1?r') Then
        $sURL = $oImg.src
        ExitLoop
    EndIf
Next
If $sURL Then
    InetGet($sURL,'capcha.jpg',1)
Else
    ConsoleWrite('Изображение по указанным критериям не найдено.' & @LF)
EndIf
 

defens

Знающий
Сообщения
89
Репутация
5
inververs
тема похожая но не выходит тем способом

Код:
<img alt="" src="//swa.mail.ru/c/1?r=3458980553" width="180" height="100">


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

через Screen получается так:
Код:
..........
For $oIMG In $oIMGs
    If StringInStr($oIMG.src, '1?r=') Then
        $iCount += 1
        $aResult[$iCount][0] = $oIMG.src ;ссылки на картинки (на всякий случай)
        For $i = 1 To 4
            $aResult[$iCount][$i] = _IEPropertyGet($oIMG, $aResult[0][$i])
        Next
    EndIf
Next
..........

взял здесь
http://autoit-script.ru/index.php/topic,7235.msg49784.html#msg49784
 

inververs

AutoIT Гуру
Сообщения
2,135
Репутация
465
defens
Тот код ищет картинку по какому то критерию, и копирует ее в буфер обмена. Обычно, при этом експлорер требует подтверждения у пользователя, но эту настроку можно разрешить. Код рротестирован на IE версии 9. Быть может функции, которые там описаны не будут работать в младших версиях. Если у вас не работает скажите вашу версию IE.
 
Верх