首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法通过脚本登录Twitch

无法通过脚本登录Twitch
EN

Stack Overflow用户
提问于 2014-09-06 19:23:44
回答 2查看 2.6K关注 0票数 0

我正试图通过Python登录到Twitch.tv网站。尽管给出了所有参数,但还是不允许我登录。以下是代码:

代码语言:javascript
复制
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()

理想情况下,登录后,它应该回到主页并显示登录用户的名称。对我来说,它显示的html表示它没有登录。请帮帮我

这里给出的用户/密码是真实的,可以用于测试

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-09-07 20:42:06

我快速查看了一下您想要的站点,发现它非常重。在登录post请求之后,它将遵循重定向,在新页面中,大部分内容由Javascript生成,这对于使用request、urllib2、..etc.似乎您只在stage1:登录之后,如果不使用像PhantomJS、这样的Javascript引擎,很可能大量的工作都无法得到保证。下面是我用Python中的Selenium编写的一个POC。希望会有帮助。

要安装Selenium:

代码语言:javascript
复制
pip install -U selenium 

下面是使用的Python解决方案。

代码语言:javascript
复制
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()

这是输出:

代码语言:javascript
复制
<a class="header_nick button drop" href="#" id="user_display_name">volatil3_</a>
票数 1
EN

Stack Overflow用户

发布于 2015-03-02 00:24:27

PhantomJS for Twitch,请看我的问题

代码语言:javascript
复制
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
    });
});
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25703924

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档