[PYTHON] Osez remplir le formulaire sans utiliser de sélénium

introduction

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.

Fonction d'édition

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)

Exécuter

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

Osez remplir le formulaire sans utiliser de sélénium
Comment connaître le nombre de processeurs sans utiliser la commande sar
[Selenium] Aller à la page suivante sans appuyer sur Suivant
J'ai essayé de résumer la forme de base de GPLVM
J'ai essayé d'approcher la fonction sin en utilisant le chainer
Je veux automatiser ssh en utilisant la commande expect!
J'ai essayé d'identifier la langue en utilisant CNN + Melspectogram
J'ai essayé de compléter le graphe de connaissances en utilisant OpenKE
J'ai essayé de compresser l'image en utilisant l'apprentissage automatique
[Test de décorrélation] J'ai essayé d'éteindre la ligne de démarcation avec ou sans rejet
J'ai essayé de découvrir les grandes lignes de Big Gorilla
Je veux utiliser la dernière version de gcc même si je n'ai pas les privilèges sudo! !!
Je veux automatiser ssh en utilisant la commande expect! partie 2
Je veux déplacer le sélénium pour le moment [pour mac]
J'ai essayé de simuler l'optimisation des publicités à l'aide de l'algorithme Bandit
Commencez à Selenium en utilisant python
[TF] J'ai essayé de visualiser le résultat de l'apprentissage en utilisant Tensorboard
pyenv, virtualenv Utilisez docker pour gérer l'environnement sans utiliser
J'ai essayé d'approcher la fonction sin en utilisant chainer (re-challenge)
J'ai essayé de sortir le journal d'accès au serveur en utilisant Node.js
J'ai essayé d'obtenir l'index de la liste en utilisant la fonction énumérer
Je voulais contester la classification du CIFAR-10 en utilisant l'entraîneur de Chainer
J'ai essayé de numériser le tampon estampé sur papier en utilisant OpenCV
J'ai essayé de couper une image fixe de la vidéo
J'ai essayé de calculer l'intégrale de probabilité (I à l'intégrale)
J'ai essayé de déplacer le ballon
J'ai essayé d'utiliser l'API checkio
J'ai essayé d'estimer la section.
J'ai essayé de comprendre attentivement la fonction d'apprentissage dans le réseau de neurones sans utiliser la bibliothèque d'apprentissage automatique (deuxième moitié)
J'ai essayé de transformer l'image du visage en utilisant sparse_image_warp de TensorFlow Addons
J'ai essayé d'obtenir les résultats de Hachinai en utilisant le traitement d'image
Python -J'ai essayé de restaurer la notation complète du dictionnaire dans sa forme d'origine-
J'ai essayé d'estimer la similitude de l'intention de la question en utilisant Doc2Vec de gensim
J'ai appris le grattage à l'aide de sélénium pour créer un modèle de prédiction de courses de chevaux.
J'ai essayé de contrôler plusieurs servomoteurs MG996R en utilisant le servomoteur PCA9685.
J'ai essayé de résumer diverses phrases à l'aide de l'API de synthèse automatique "summpy"
J'ai essayé d'extraire et d'illustrer l'étape de l'histoire à l'aide de COTOHA
J'ai essayé l'histoire courante de l'utilisation du Deep Learning pour prédire la moyenne Nikkei
En utilisant COTOHA, j'ai essayé de suivre le cours émotionnel de la course aux meros.
J'ai essayé d'analyser la carte du Nouvel An par moi-même en utilisant python
J'ai essayé de comprendre attentivement la fonction d'apprentissage dans le réseau de neurones sans utiliser la bibliothèque d'apprentissage automatique (première moitié)
J'ai essayé d'obtenir les informations du site .aspx qui est paginé à l'aide de Selenium IDE aussi sans programmation que possible.
Je veux épingler Spyder à la barre des tâches
Je veux sortir froidement sur la console
J'ai essayé d'utiliser Azure Speech to Text.
J'ai essayé de résumer la commande umask
Je veux gérer la rime part1
J'ai essayé de reconnaître le mot de réveil
J'ai essayé d'utiliser du sélénium avec du chrome sans tête
Je veux gérer la rime part3
J'ai essayé de classer le texte en utilisant TensorFlow
J'ai essayé de résumer la modélisation graphique.
Redémarrez le routeur en utilisant Python, Selenium, PhantomJS
Je ne peux pas obtenir l'élément dans Selenium!
J'ai essayé d'estimer le rapport de circonférence π de manière probabiliste
J'ai essayé de toucher l'API COTOHA
Je veux afficher la barre de progression
J'ai essayé d'utiliser Headless Chrome de Selenium