python beautifulsoup python-requests twitch

python - No se puede iniciar sesión Twitch TV a través de secuencia de comandos



beautifulsoup python-requests (2)

Eché un vistazo rápido al sitio que desea y descubrí que es un javascript muy pesado. Después de la solicitud de inicio de sesión, seguirá una redirección, y en la página nueva, la mayoría de los contenidos son generados por Javascript, lo cual es realmente una molestia para trabajar con request, urllib2, ..etc ... Parece que eres solo en la etapa 1: iniciar sesión, después de eso, probablemente toneladas de trabajo realmente no puedan garantizarse sin utilizar un motor Javascript como PhantomJS, Selenium . Aquí hay un POC que escribí usando Selenium en Python. La esperanza será útil.

Para instalar Selenio:

pip install -U selenium

Aquí hay una solución de Python que usa Selenium .

from selenium import webdriver from selenium.webdriver.common.keys import Keys import time from bs4 import BeautifulSoup my_username = "volatil3_" my_password = "thisispassword" driver = webdriver.Firefox() driver.get("http://www.twitch.tv/user/login") elem_user = driver.find_element_by_id("login_user_login") elem_passwd = driver.find_element_by_id("user[password]") elem_user.send_keys(my_username) elem_passwd.send_keys(my_password + Keys.RETURN) # In case it need some time to populate the content. #time.sleep(5) html = driver.page_source soup = BeautifulSoup(html) logginTag = soup.find("a", {"id" : "user_display_name"}) print(logginTag) driver.close()

Y aquí está el resultado:

<a class="header_nick button drop" href="#" id="user_display_name">volatil3_</a>

Estoy intentando iniciar sesión en el sitio web de Twitch.tv a través de Python. A pesar de dar todos los parámetros, todavía no me permite iniciar sesión. A continuación se muestra el código:

import requests from bs4 import BeautifulSoup from time import sleep # #user[login]:volatil3_ # user[password]:thisispassword #https://secure.twitch.tv/user/login # <a href="#" class="header_nick button drop" id="user_display_name"> volatil3_ </a> def connect(): user = {''Username'':''volatil3_'',''Password'':''thisispassword''} headers = {''User-Agent'': ''Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_8) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.94 Safari/537.36'',''Referer'':''http://www.twitch.tv/user/login''} with requests.Session() as s: html = s.get("http://www.twitch.tv/user/login", headers=headers, verify=False, timeout=5) soup = BeautifulSoup(html.text) tokenTag = soup.find("input", {"name" : "authenticity_token"}) token = tokenTag["value"].strip() #print(html.text) print("-----------------------------------------------") credentials = {"user[login]":''volatil3_'', "user[password]":''thisispassword'',"authenticity_token":token,''redirect_on_login'':''https://secure.twitch.tv/user/login'',''embed_form'':''false'',''utf8'':''&#x2713;'',''mp_source_action'':'''',''follow'':''''} print(credentials) s.post("https://secure.twitch.tv/user/login", data = credentials, headers=headers, verify=False, timeout=10,allow_redirects=True) #html = s.get("http://www.twitch.tv", headers=headers, verify=False, timeout=5) soup = BeautifulSoup(html.text) logginTag = soup.find("a", {"id" : "user_display_name"}) print(logginTag) if "Log In" in html.text: print("cound not log in") connect()

Lo ideal es que, después de iniciar sesión, vuelva a la página de inicio y muestre el nombre del usuario que inició sesión. Para mí, muestra html que indica que no está conectado. Ayúdame por favor

El usuario / contraseña que se proporciona aquí son reales y se pueden usar para probar


PhantomJS para Twitch Login, mira mi pregunta aquí

var page = require(''webpage'').create(); page.open(''http://www.twitch.tv/login'', function() { page.includeJs("http://ajax.googleapis.com/ajax/libs/jquery/1.6.1/jquery.min.js", function() { page.evaluate(function() { $("#login_user_login").val("username"); $("[id=''user[password]'']").val("password"); $(".button.primary:first").click(); // click login button }); setTimeout(function(){ page.render("e.png"); // see if anything happens phantom.exit(); }, 5000); // 5 seconds }); });