Найти - Пользователи
Полная версия: mechanize.Browser() и Яндекс.Паспорт :(
Начало » Web » mechanize.Browser() и Яндекс.Паспорт :(
1 2 3 4 5
Chrizt
Здравствуйте.
from mechanize import Browser
br = Browser()
br.open('https://passport.yandex.ru')

Ругается и вылетает:
Traceback (most recent call last):
File "C:\Documents and Settings\..........\clubs.py", line 39, in <module>
br.open('https://passport.yandex.ru/')
File "build\bdist.win32\egg\mechanize\_mechanize.py", line 209, in open
return self._mech_open(url, data, timeout=timeout)
File "build\bdist.win32\egg\mechanize\_mechanize.py", line 261, in _mech_open
raise response
httperror_seek_wrapper: HTTP Error 403: request disallowed by robots.txt
Не совсем понимаю, что это за ерунда. Опера обычная заходит без проблем. Менял br.addheaders бла-бла User-agent на оперовский, да и вообще фигню писал, но ничего не вышло. та же фигня :(

Просто urrlib2.open('…') заходит без проблем.
Даже подумываю спереть оттдуа, залогинившись, куку, и с ней уже делать дела, якобы уже будучи авторизованным, если там так работает.

Но это не тот путь. не совсем удобно.



Подскажите, пожалуйста, что это и возможные решения, используя именно механайз с его функционалом!! Пллииизззззз!!!! А то уже бьюсь башкой об стену. честно :(
Chrizt
Блин!
br.set_handle_robots(False)
и всй сработало!! )

ещё не совсем разобрался, что это означает, но работает!! Надеюсь, кому-то ещё пригодится )
topazz
Это означает отмену следования правилам описанных в Robots.txt

Только там где яндекс паспорт, не все так просто у меня получилось..

Если вы там просто логинитесь, думаю все ок будет, а если аки регите, то там половина формы на javascript. Если с помошью mechanize справитесь напишите )
Chrizt
Не, я не регаю акки.
Войти-то вошёл, а вот по сервисам Яши никак не получается сёрфать, сохраняя авторизацию. Там кроссдоменная авторизация или как это там называется.. В общем, пока всё чо нужно, делаю вручную :(
Есть идеи?
topazz
Идеи есть, но кривые - использовать win32com.

from win32com.client import Dispatch

ie = Dispatch("InternetExplorer.Application")
ie.Visible = 1
ie.Navigate("http://www.yandex.ru")
....
Chrizt
Хмм.. А как управлять управляющими элементами? Формы, кнопки, поля.. Авторизация то у меня и через механайз идет, а вот, стоит покинуть Паспорт - ничего не помогает. Еще попробую в куках заменить хост на звездочку или нужный сервис яши. Суть именно в управлении.
Кстати, могу выложить xml-логи сниффера, как происходит авторизация, с последующим присоединением к клубу на я.ру. Надо?
topazz
Как управлять ие - вот в чем вопрос..

Управляем через дум
берем документ
    doc = ie.Document
while doc.readyState != "complete":
time.sleep(n)
берем хтмл

    text = ie.Document.body.innerHTML
text = unicode(text)
text = text.encode('ascii','ignore')
Сабмитим

    doc.bigForm.iname.value = "Степа"
doc.bigForm.fname.value = "Длинный"
doc.bigForm.login.value = login
doc.bigForm.submit()
Выполняем js. Если какая либа умеет работать с js подскажите.

ie.Navigate("javascript:getNewNames()")
Сайт с примерами накрылся.. так что искать все через гугл
Вот надстройка над win32com http://www.mayukhbose.com/python/IEC/index.php
Так и не понял зачем если все это можно напрямую делать.
Chrizt
Хмм.. Спасибо. Покурю, конечно, маны, так как не понял почти. Но на готовом примере уже яснее. Благодарю. Так, конечно, памяти будет, наверное, кушаться не мало, ну да пофиг. Главное - результат! Еще раз, сенки :)
Chrizt
Для массовости. Например, в я.почте нету массовой сортировки писем. Например, мне надо все непрочитанные сделать прочитанными, а их 4К+ - не руками же всё это гребсти, особенно, на слабом компе. А я.почта довольно много хавает.

Кстати, у меня методы ie не работают - пишет, что “Сервер RPC недоступен.” :(

Traceback (most recent call last):
File "C:\Documents and Settings\Chrizt\Рабочий стол\ie.py", line 7, in <module>
doc = ie.Document
File "C:\Python26\lib\site-packages\win32com\client\dynamic.py", line 501, in __getattr__
ret = self._oleobj_.Invoke(retEntry.dispid,0,invoke_type,1)
com_error: (-2147352567, '\xce\xf8\xe8\xe1\xea\xe0.', (0, None, None, None, 0, -2147467259), None)
да и странно как-то: ИДЛЕ не выдаёт в подсказках никаким подобных методов. Я, конечно, не знаток питона, а у ж тем более - COM :(

p.s. Запустил в pywin - там вроде выполнилось, но опять же, doc.bigForm - такого нету :(
Chrizt
Traceback (most recent call last):
File "C:\Documents and Settings\Chrizt\Рабочий стол\ie.py", line 15, in <module>
doc.bigForm.iname.value = "Степа"
File "C:\Python26\lib\site-packages\win32com\client\dynamic.py", line 512, in __getattr__
raise AttributeError("%s.%s" % (self._username_, attr))
AttributeError: <unknown>.bigForm
ХОТЬ УБЕЙ! :(
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB