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


von Mira B. (goto_start)


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
von Tobias B. (Firma: www.elpra.de) (ttobsen) Benutzerseite


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/

von Martin (Gast)


Lesenswert?

wget oder curl

von Complex (Gast)


Lesenswert?

Hängt von der Komplexität der Webseite ab.

von imonbln (Gast)


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.

von Karl Käfer (Gast)


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

von Karl Käfer (Gast)


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.
von Alter Hase (Gast)


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:
1
const puppeteer = require('puppeteer');
2
3
async function login() => {
4
  const browser = await puppeteer.launch();
5
  const page = await browser.newPage();
6
  await page.goto('https://example.com');
7
8
  await page.type('#username', 'username');
9
  await page.type('#password', 'password');
10
11
  await page.click('#submit');
12
  await page.waitForNavigation();
13
14
  await page.screenshot({path: 'example.png'});
15
16
  await browser.close();
17
}
18
19
login();

von Alter Hase (Gast)


Lesenswert?

Copy & Paste Tippfehler:
1
async function login() => {

muss natürlich:
1
async function login() {

sein...

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.