Es ist nicht so sehr "wagen", aber wenn ich die Formularbearbeitung mit Python untersuche, erscheint häufig Selen, also habe ich es mit Requests + Beautiful Soup implementiert.
Zuvor veröffentlichter Artikel ist als Entwicklung genau richtig, daher habe ich den Profiltext von Qiita bearbeitet.
Es wurde festgestellt, dass viele bearbeitbare Elemente aus der Quelle den Typ ['Text', 'URL', 'Kontrollkästchen'] haben, sodass ich sie mit geringem Aufwand abrufen konnte. Wenn Sie "Benutzer [Beschreibung]]" hinzufügen, was eine Erfassungsauslassung ist, und diese dann bearbeiten, werden die Post-Daten vervollständigt. Aus irgendeinem Grund war das Kontrollkästchen zum Veröffentlichen von E-Mails standardmäßig aktiviert, daher behebe ich es auf 0. Sobald Sie die Daten erstellt haben, veröffentlichen Sie sie über die Anmeldesitzung und Sie sind fertig.
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 standardmäßig aus irgendeinem Grund
post_data['user[description]'] = 'Ich habe es bearbeitet! !! !! !!'
print(post_data)
response = session.post(profile_url, post_data)
print(response)
Fügen Sie edit_profile () zu dem zuletzt erstellten Programm hinzu, um das Programm abzuschließen.
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 standardmäßig aus irgendeinem Grund
post_data['user[description]'] = 'Ich habe es bearbeitet! !! !! !!'
print(post_data)
response = session.post(profile_url, post_data)
print(response)
if __name__ == '__main__':
session = requests.Session()
login(session)
edit_profile(session)
Wenn es ausgeführt wird und Antwort [200] zurückgegeben wird, ist es erfolgreich.
Recommended Posts