Ce n'est pas tant que «oser», mais lorsque j'étudie l'édition de formulaires avec Python, le sélénium apparaît souvent, donc je l'ai implémenté avec Requests + Beautiful Soup.
Article précédemment publié est juste comme un développement, j'ai donc édité le texte du profil de Qiita.
De nombreux éléments modifiables ont été trouvés à la source comme étant de type ['text', 'url', 'checkbox'], donc j'ai pu les obtenir avec peu d'effort. Ajoutez le "utilisateur [description]]" manquant et modifiez-le pour compléter les données de publication. Pour une raison quelconque, la case à cocher pour la publication des e-mails a été cochée par défaut, je la fixe donc à 0. Une fois que vous avez créé les données, publiez-les en utilisant la session de connexion et vous avez terminé.
def edit_profile(session):
profile_page_data = get_page_data(session, profile_url)
bs_profile_page = BeautifulSoup(profile_page_data.text, 'html.parser')
authenticity_token = str(bs_profile_page.find(attrs={'name':'authenticity_token'}).get('value'))
post_data = {
'utf-8':'✓',
'_method': 'put',
'authenticity_token':authenticity_token
}
response = bs_profile_page.find_all(attrs={'type':['text', 'url', 'checkbox']})
for i in response:
value = i.get('value')
post_data[i.get('name')] = value
post_data['user[public_email]'] = 0 #1 par défaut pour une raison quelconque
post_data['user[description]'] = 'Je l'ai édité! !! !! !!'
print(post_data)
response = session.post(profile_url, post_data)
print(response)
Ajoutez edit_profile () décrit ci-dessus au programme créé la dernière fois pour terminer le programme.
import requests
import os
from bs4 import BeautifulSoup
import json
user_name = 'user_name'
user_password = 'user_password'
login_url = 'https://qiita.com/login'
profile_url = 'https://qiita.com/settings/profile'
def get_authenticity_token(session, login_url):
page_data = get_page_data(session, login_url)
bs_page_data = BeautifulSoup(page_data.text, 'html.parser')
authenticity_token = str(bs_login_page.find(attrs={'name':'authenticity_token'}).get('value'))
return bs_page_data, authenticity_token
def get_page_data(session, url):
response = session.get(url)
response.encoding = response.apparent_encoding
return response
def login(session):
login_form = {
'utf-8':'✓',
'authenticity_token':'token',
'identity':user_name,
'password':user_password
}
bs_login_page, authenticity_token = get_authenticity_token(session, login_url)
login_form['authenticity_token'] = authenticity_token
session.post(login_url, login_form)
def edit_profile(session):
bs_profile_page, authenticity_token = get_authenticity_token(session, profile_url)
post_data = {
'utf-8':'✓',
'_method': 'put',
'authenticity_token':authenticity_token
}
response = bs_profile_page.find_all(attrs={'type':['text', 'url', 'checkbox', 'textarea']})
for i in response:
value = i.get('value')
post_data[i.get('name')] = value
post_data['user[public_email]'] = 0 #1 par défaut pour une raison quelconque
post_data['user[description]'] = 'Je l'ai édité! !! !! !!'
print(post_data)
response = session.post(profile_url, post_data)
print(response)
if __name__ == '__main__':
session = requests.Session()
login(session)
edit_profile(session)
S'il est exécuté et que la réponse [200] est renvoyée, il réussit.
Recommended Posts