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'':''✓'',''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
});
});