私は、私が作業しているプロジェクトを持っており、要件はユーザー名とパスワードを使ってウェブサイトにログインすることです。私はPythonでそれを行う必要がありますし、ログインしている人にしかアクセスできないサイトの一部にアクセスできるようにしなければなりません。これを行うためにいくつかのバリエーションを試してみましたが、まだ。ここに私のコードは次のとおりです。python3とリクエストを使用してツイッターにログインする
それにログインする機能:
デフセッション2(URL):それを呼び出すために
#r = requests.get(url)
#ckies = []
#print("here are the cookies for twitter:\n")
#for cky in r.cookies:
# print(cky.name, cky.value)
# ckies.append(cky)
s = requests.Session()
session = s.get(url, verify=False)
print("\nheaders from site\n")
print(session.headers)
tree = html.fromstring(session.text)
# extract the auth token needed to login along with username and password
auth_token = list(set(tree.xpath("//input[@name='authenticity_token']/@value")))[0]
uname = "username"
pword = "password"
username = 'session[username_or_email]'
password = 'session[password]'
# payload = {name of username variable : string you want, name of password variable:
# string you want, name of auth token: string gotten from session
payload = dict(username = uname, password = pword , authenticity_token = auth_token)
header = {'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.116 Safari/537.36'}
#do post request
# might have to change headers to be a header for chrome
response = s.post(
url,
data = payload,
#headers = dict(referer = url)
headers = header
)
print("\nheaders post\n")
print(response.request.headers)
session = s.get("http://www.twitter.com/username/followers", verify=False)
print("\nheaders get\n")
print(session.headers)
print("\nhtml doc\n")
print(session.text)
return session
コード:
url = "http://www.twitter.com/login"
sessions = session2(url)
サイト上のユーザ名それを調べるときにこのように見えます:
<input class="js-username-field email-input js-initial-focus" type="text" name="session[username_or_email]" autocomplete="on" value="" placeholder="Phone, email or username">
とパスワードセクション/トークンセクションでは、次のようになります。
<input class="js-password-field" type="password" name="session[password]" placeholder="Password">
<input type="hidden" value="ef25cb09a8c7fe16c54e3df099e206e605b1170a" name="authenticity_token">
私はそれが機能からそれを得る持っている理由である認証トークンの変更を、知っています。これを実行しようとすると、必要なページではなくメインページに移動します。
{ 'エンコーディングを受け入れる]::「GZIPを、収縮させる」、「接続」:「キープ思う
一つの問題は、私はポストに送るヘッダを印刷するとき、それが言うことです': '/'、 'のUser-Agentを': '」、' 受け入れ生きているのpython-要求を/ 2.9.1を'}私はクロームのヘッダーに変更と思ったが、固執していないよう
。
はまた、私は私がのOauthを使用する場合の方法があるけど、私はそれを使用することはできませんよ、私は、ブラウザを使用していますようにログインすることができることに基づいて、それをしなければなりません。
私がやったことに何か問題があるかどうか、それを修正する方法のヒントがありますか?私は要求とログインを使用して他のスタックオーバーフローの問題を試みましたが、それらはうまくいきませんでした。
EDIT:[OK]を、私はresponse.request.headersをした、そしてそれは、私が思うに、右のヘッダーで出てきたので、私はそれはそれは印刷し、問題
ヘッダであるとは思わない:
{'Accept': '*/*', 'Content-Type': 'application/x-www-form-urlencoded', 'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.116 Safari/537.36', 'Cookie': '_twitter_sess=some huge amount of number/letters; guest_id=v1%3A147509653977967101', 'Connection': 'keep-alive', 'Accept-Encoding': 'gzip, deflate'}
はかなり複雑な手順である、彼らはその理由のためのAPIを持っています。 *私はどこから来ているブラウザを使っているようにログインすることができるかに基づいてそれをしなければならないのですか? –
私のアドバイザー/上級者は、Webクローラーやボットのようにする必要があると言います。また、パスワードとユーザー名を入力するためにgoogle chromeを使用しているのと同じ方法でログインする必要があります。彼はライブデータの場合と同じようにAPIを使用しないようにと言ってくれました。彼は現在のデータではなく、数日前のデータを取得したいと考えています。 – user2827286
ブラウザが開かないようにしていますか?私は試してみたいと思うし、それがうまくいくと彼はそれでうまくいくと思う。主なものは、pythonを使ってログインし、データを取得することです。 – user2827286