あなたは直接の要求が失敗したリクエストを使ってログインしようとする前に、セレンを直接使用することは簡単で、粗製のログインです。今日は、ログインセクション、そして収穫の多くをシミュレート兄「ウェブクローラー開発戦闘」を見ました。
シミュレートされた着陸要求のキーを使用:
まず:それは、対応する要求アドレスを見つけることです
第二:ヘッドに対応するフォームフォームデータを提出するよう要求する様々な分野を見つけ、その値
最初のステップ:対応するリクエストのアドレスを見つけるために
クレソンを取り、例えば、ログイン画面のユーザー名とパスワードを入力するか、間違ったユーザー名とパスワードを入力し、[ログイン]をクリックし、その後、ネットワークログオン要求で対応するアドレスを見つけることができません。
以下に示すように、我々は、私のスキルを要求したいです伝えるためにどのように多くのアドレスでのネットワークは、フォームデータとどのような要求を確認することです。
基本的な要求URL図に対応:https://accounts.douban.com/j/mobile/login/basic
我々は、要求に対処したいもの
ステップ2:あなたはフォームデータがヘッドに対応する要求書を提出したいのさまざまな分野、およびその価値を見つけます
また、この写真を参照してください。
5つのフィールドの合計:
CK:意味不明、空白文字列で塗りつぶし
名前:ユーザー名
パスワード:パスワード
覚えておいてください、パスワードを記録するかどうかをtrueまたはflaseを行います
チケット:意味不明、空白文字で塗りつぶし
二つの重要なステップを取得し、コードであってもよいです
import requests
from lxml import etree
class DouLogin(object):
def __init__(self):
self.headers = {
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.97 Safari/537.36'}
self.login_url = 'https://accounts.douban.com/j/mobile/login/basic'
self.logined_url = 'https://www.douban.com/'
self.session = requests.Session()
def login(self, email, password):
post_data = {
'ck': '', # 可选
'name': email,
'password': password,
'ticket': '', # 可选
}
response = self.session.post(self.login_url, data=post_data, headers=self.headers)
if response.status_code == 200 and response.json().get('status') == 'success':
response = self.session.get(self.logined_url)
selector = etree.HTML(response.text)
username = selector.xpath("//li[@class='nav-user-account']/a/span/text()")[0]
print('登录成功:这是%s' % username)
else:
print('登录失败:%s' % response.json().get('description'))
if __name__ == "__main__":
login = DouLogin()
login.login(email='[email protected]', password='xxx')
成功した出力ログイン:
ログイン成功:これは口座番号であるXXX
ログインは出力が失敗しました:
ログインに失敗しました:CAPTCHA
PS:時々二スライドによる故障、一時的な処理のことを確認してくださいかもしれません
PPS:githubのは、着陸しようと、彼の失敗したフォームデータをより多く設定し、又はセレン大法短い答え失礼ではないと推定されるフィールド、内