Me gustaría iniciar sesión en mi cuenta yahoo desde un script que se ejecuta en un servidor ubuntu. He tratado de usar Python con mecanize, pero hay un defecto en mi plan.cómo iniciar sesión en Yahoo programáticamente desde un servidor ubuntu
Este es el código que tengo en este momento.
loginurl = "https://login.yahoo.com/config/login"
br = mechanize.Browser()
cj = cookielib.LWPCookieJar()
br.set_cookiejar(cj)
br.set_handle_equiv(True)
br.set_handle_gzip(True)
br.set_handle_redirect(True)
br.set_handle_referer(True)
br.set_handle_robots(False)
br.set_handle_refresh(mechanize._http.HTTPRefreshProcessor(), max_time=1)
br.addheaders = [('User-agent', 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.1) Gecko/2008071615 Fedora/3.0.1-1.fc9 Firefox/3.0.1')]
r = br.open(loginurl)
html = r.read()
br.select_form(nr=0)
br.form['login']='[mylogin]'
br.form['passwd']='[mypassword]'
br.submit()
print br.response().read()
La respuesta que recibo es una página de inicio de sesión de Yahoo con texto rojo en negrita. "Javascript debe estar habilitado en su cuenta bancaria" o algo similar. Hay una sección en los documentos mecanize que menciona páginas que crean cookies con JS, pero la página de ayuda devuelve un HTTP 400 (simplemente mi suerte)
Averiguar qué hace el javascript y luego hacerlo manualmente suena como un muy tarea difícil. Estaría dispuesto a cambiar a cualquier herramienta/idioma, siempre y cuando se pueda ejecutar en un servidor ubuntu. Incluso si eso significa usar una herramienta diferente para el inicio de sesión y luego pasar la cookie de inicio de sesión a mi script de python. Cualquier ayuda/consejo apreciado.
Actualización:
no deseo utilizar las API de Yahoo
También he tratado con scrapy, pero creo que el mismo problema se produce
Mi scrapy script
class YahooSpider(BaseSpider):
name = "yahoo"
start_urls = [
"https://login.yahoo.com/config/login?.intl=us&.lang=en-US&.partner=&.last=&.src=&.pd=_ver%3D0%26c%3D%26ivt%3D%26sg%3D&pkg=&stepid=&.done=http%3a//my.yahoo.com"
]
def parse(self, response):
x = HtmlXPathSelector(response)
print x.select("//input/@value").extract()
return [FormRequest.from_response(response,
formdata={'login': '[my username]', 'passwd': '[mypassword]'},
callback=self.after_login)]
def after_login(self, response):
# check login succeed before going on
if response.url == 'http://my.yahoo.com':
return Request("[where i want to go next]",
callback=self.next_page, errback=self.error, dont_filter=True)
else:
print response.url
self.log("Login failed.", level=log.CRITICAL)
def next_page(sekf, response):
x = HtmlXPathSelector(response)
print x.select("//title/text()").extract()
El guión scrapy simplemente da salida a "https://login.yahoo.com/config/login" ...... Boo
¿No hay API de Yahoo para ese tipo de cosas? –
Sí, pero lamentablemente su funcionalidad limitada – DrLazer
No tengo ningún problema con el script. – xbb