mikrocontroller.net

Forum: PC-Programmierung Automatisierter Login auf Webseite (Linux ohne GUI), Python sehr geeignet?


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
Autor: Mira B. (goto_start)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

was Webentwicklung und alles in dieser Richtung angeht, davon habe ich 
praktisch keine Ahnung. Netzwerktechnik, also Zeugs a la 
MAC-/IP-Adressen, Routing usw., nur davon habe ich einigermaßen einen 
Überblick und programmiert habe ich bishher hauptsächlich in C/C+ (eig. 
fast nur). Auch Python ist/wäre Neuland für mich.

Was ich gerne machen würde wäre ein kleines Programm oder Skript, das 
auf einem Linux-ARM laufen soll, das über keine grafische Oberfläche 
verfügt (*) (also auch kein, zumindest klassischer, Browser vorhanden) 
und sich auf einer Html-Webseite mit Usernamen uns Passwort einloggen 
können soll. Eine Captcha-Prüfung gibt es nicht. "Lediglich" sollen die 
beiden Textfelder ausgefüllt und eine Entertastenbetätigung oder ein 
Anklicken des Log-In-Buttons simuliert werden.

Liege ich richtig, wenn ich tippe, dass für sowas Python die erste Wahl 
sein müsste?

Könntet ihr mir bitte mit dem ein oder anderen Stichwort weiterhelfen, 
mit welcher Technik sowas am Besten und Einfachsten gemacht wird? Dann 
wüsste ich wonach ich suchen muss. Programmiertechnisch, denke ich, 
werde ich das irgendwie hingepfuscht bekommen. Bestimmt gibt es für 
sowas eine fertige Bibliothek, die "nur" ;) noch eingebunden und 
angewandt werden muss, oder nicht? Gibt es Python-Pros unter euch?

Eine neue Sprache, Python, zu verwenden wäre hier kein notwendiges Übel 
sondern eine mehr als willkommene Gelegenheit.


DANKE!!



/edit

(*)
Das Linux (Arch) hat keine grafische Oberfläche, nicht nur das 
Progrämmchen.

: Bearbeitet durch User
Autor: Tobias B. (Firma: www.elpra.de) (ttobsen) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das ganze ist mit Python wirklich super easy zu machen. Die Stichworte 
sind HTTP Get/POST Reqests, jenachdem wie der Login der Seite aufgebaut 
ist.

Ein Beispiel wie man solche Requests absetzt:

https://www.geeksforgeeks.org/get-post-requests-using-python/

Autor: Martin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
wget oder curl

Autor: Complex (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hängt von der Komplexität der Webseite ab.

Autor: imonbln (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wie immer, es kommt darauf an, was deine eigentliches Ziel ist. für nur 
einloggen auf der Webseite reichen vielleicht wget oder curl. Wobei Curl 
auch eine Lib ist und sich auch aus C++ ansprechen lässt.

Python3 mit den module Reqests ist definitv dein Freund, vielleicht 
brauchst du auch noch ein Cookie Jar, damit sollte sich eigentlich alles 
was du uns als Problem genannt hast lösen lassen und vorallen alles was 
genannt wurde ist bei Python schon im Standart mit dabei. Wenn du mit 
den Daten der Website auch noch was machen willst könnte das Schlagwort 
Webscrapping with Python sein.

Info am Rande Python2 soll Ende des Jahres EOL Werden, daher empfehle 
ich Dir, Dich gleich mit Python3 zu befassen.

Autor: Karl Käfer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mira B. schrieb:
> Was ich gerne machen würde wäre ein kleines Programm oder Skript, das
> auf einem Linux-ARM laufen soll, das über keine grafische Oberfläche
> verfügt (*) (also auch kein, zumindest klassischer, Browser vorhanden)
> und sich auf einer Html-Webseite mit Usernamen uns Passwort einloggen
> können soll. Eine Captcha-Prüfung gibt es nicht. "Lediglich" sollen die
> beiden Textfelder ausgefüllt und eine Entertastenbetätigung oder ein
> Anklicken des Log-In-Buttons simuliert werden.

Das kommt darauf an. Im Grunde genommen bietet HTTP(S) bereits selbst 
zwei eingebaute Authentifizierungsmechanismen, Base Auth und Digest 
Auth. Weil die aber häufig relativ unflexibel sind und meistens nicht 
sehr weit über die reine Authentifizierung hinaus gehen, also keine 
allzu feingranulare Autorisierung ermöglichen, entwickeln 
Webseitenentwickler oft eine eigene Authentifizierung. Das kannst Du 
relativ leicht unterscheiden: wenn die Webseite ein kleines 
System-Zusatzfensterchen öffnet und nach Username und Paßwort fragt, ist 
meistens Base oder Digest Auth im Spiel, wenn die Seite hingegen ein 
Eingabeformular im Design und Stil der Seite zeigt, haben die Entwickler 
selbst etwas implementiert.

Login-Credentials für Base und Digest Auth können für alle 
entsprechenden Python-Bibliotheken (zB. requests oder urllib) 
eingestellt werden. Für eigenentwickelte Authentifizierungsmethoden mußt 
Du Dir üblicherweise das Formular anschauen, um die Namen der 
Eingabefelder heraus zu bekommen, und dann den Session-Cookie 
durchschleifen, den Du nach einer erfolgreichen Authentifizierung vom 
Server bekommst. Auch das ist mit den vorgenannten Python-Bibliotheken 
allerdings sehr einfach.

> Liege ich richtig, wenn ich tippe, dass für sowas Python die erste Wahl
> sein müsste?

Sowas kann natürlich jede Skriptsprache, egal ob Perl, Ruby oder Python. 
Dennoch ist Python aus diversen Gründen eine besonders gute Wahl, wenn 
Du eine neue Sprache lernen willst.

> Gibt es Python-Pros unter euch?

Wenn es einen zum "Python-Pro" macht, die Sprache beruflich und privat 
zu benutzen und in den letzten zwölf Jahren kaum einen Tag erlebt zu 
haben, an dem man keinen Python-Code bearbeitet oder geschrieben hat: 
ja, dann gibt es Python-Pros unter uns. ;-)

Liebe Grüße,
Karl

Autor: Karl Käfer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Martin schrieb:
> wget oder curl

...gehen nur mit HTTP(S) Base und Digest Auth... Der TO fragt außerdem 
nach einer Programmiersprache, nicht nach fertigen Downloadprogrammen. 
Vermutlich möchte er die Inhalte der Seite eben nicht nur herunterladen, 
sondern auch weiterverarbeiten -- zum Beispiel mit BeautifulSoup.

Beitrag #5988508 wurde vom Autor gelöscht.
Autor: Alter Hase (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das Thema nennt sich "Browser automation". Macht man nicht mit wget, 
curl oder von Hand selbst, sondert verwendet eine moderne Lösung.

Für Python z.B. Selenium, Javascript Puppeteer, und wie sie alle heißen.

Javascript sieht dann z.B. so aus:

const puppeteer = require('puppeteer');

async function login() => {
  const browser = await puppeteer.launch();
  const page = await browser.newPage();
  await page.goto('https://example.com');

  await page.type('#username', 'username');
  await page.type('#password', 'password');

  await page.click('#submit');
  await page.waitForNavigation();

  await page.screenshot({path: 'example.png'});

  await browser.close();
}

login();


Autor: Alter Hase (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Copy & Paste Tippfehler:
async function login() => {

muss natürlich:
async function login() {

sein...

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.