Dans ce qui suit, nous utiliserons Qiita comme exemple.
La source du formulaire de connexion Qiita est la suivante:
<form class="landingLoginForm" autocomplete="off" data-event_name="Login with password" action="/login" accept-charset="UTF-8" method="post">
<input name="utf8" type="hidden" value="✓">
<input type="hidden" name="authenticity_token" value="rYIMTVoDlb4eCzh6wZIRgiPQHmrr5ts9DyykDCE9FkHM7zQxX7WAhmUhW8y0BPIA3MvzH31KCFEyiPTVk4GBzQ==">
<input type="text" name="identity" id="identity" placeholder="Username or email" autofocus="autofocus" class="form-control landingLoginForm_identity">
<div class="row">
<div class="col-sm-9 landingLoginForm_passwordColumn">
<input type="password" name="password" id="password" placeholder="Password" class="form-control">
</div>
<div class="col-sm-3 landingLoginForm_submitColumn">
<input type="submit" name="commit" value="Login" class="btn btn-primary btn-block" data-disable-with="Login">
</div>
</div>
<div class="landingLoginForm_forgotPassword">
<a href="https://qiita.com/sessions/forgot_password">Forgot Password?</a>
</div>
<div class="help-block js-email-invalid-message" style="display: none"></div>
</form>
これより、ログインボタンを押すとqiita.com/login
に
utf8
authenticity_token
identity
password
On peut voir que les données sont transmises. Parmi ceux-ci, utf8
reçoit une valeur par défaut, alors utilisez-la, et authenticity_token
reçoit une valeur pour chaque accès, vous devez donc l'obtenir. Entrez les informations à la main dans les autres identités
et `` mot de passe```
Python a une bibliothèque pratique pour la communication HTTP appelée requêtes, il est donc sûr de l'utiliser. Une fois connecté, il est nécessaire de sauvegarder la valeur de session, communiquez donc via l'objet `` Session ''.
De plus, comme mentionné ci-dessus, il est nécessaire d'obtenir authenticity_token
avant de vous connecter, alors accédez d'abord à la page d'accueil et à BeautifulSoup. Obtenez la valeur avec /).
Voici un exemple de script pour vous connecter à Qiita:
from bs4 import BeautifulSoup
import requests
payload = {
'utf8': '✓',
'identity': 'username or email',
'password': 'secret'
}
# authenticity_Obtenez un jeton
s = requests.Session()
r = s.get('https://qiita.com')
soup = BeautifulSoup(r.text)
auth_token = soup.find(attrs={'name': 'authenticity_token'}).get('value')
payload['authenticity_token'] = auth_token
#S'identifier
s.post('https://qiita.com/login', data=payload)
#Effectuez le traitement possible après la connexion ci-dessous
...
Dans certains cas, la méthode simple ci-dessus ne fonctionne pas (par exemple, une authentification en deux étapes est requise pour se connecter à Google), il est donc nécessaire de vérifier les informations d'en-tête HTTP, etc. en détail à chaque fois. ..
Recommended Posts