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