Link und Dropdown auf Website automatisch klicken und auswählen ?

JimmzJazz

Newbie
Registriert
Aug. 2024
Beiträge
5
Hallo zusammen,

ich bin gerade auf der Suche nach einem neuen Job und besuche dafür täglich eine Website, auf der Jobs veröffentlicht werden. Die Seite ist leider extrem benutzerunfreundlich aber leider in meinem Bereich alternativlos.
Das Problem ist, das man von der Hauptseite aus über einen Link zur nächsten Seite "zu den Stellen" weitergeleitet wird, von dort aus zu einer neuen Seite "sonstige Tätigkeiten" und von dort zu einer Seite, wo man per Dropdown seine Stadt sowie im Textfeld einen Umkreis wählen kann. Ärgerlicherweise kann man nicht wie auf anderen Seiten seine Einstellungen speichern oder zumindest die letzte Dropdownseite als Lesezeichen festlegen, sondern man wird bei jedem neuen Aufruf der Seite immer wieder auf die allererste Seite zurückgezwungen.
Dass auch die Stellenausschreibungen unfassbar unübersichtlich aufbereitet sind, macht es nicht besser. Ich weiß, dass das alles nicht wahnsinnig tragisch ist, aber es nervt mich doch ungemein.
Weil ich leider von Programmierung und allem was da dran hängt keinerlei Ahnung habe, weiß ich nicht wie ich mir technisch helfen könnte und auch nicht die Begriffe, die ich googlen könnte um weiter zu kommen.
Also habe ich ChatGPT nach Lösungsmöglichkeiten gefragt. Mit dem Quelltext der Seite gefüttert hat die KI mir die Möglichkeiten Bookmarklet und Selenium vorgeschlagen.
Ich habe jetzt einige Stunden damit verbracht, zusammen mit ChatGPT Scripte zu schreiben und zu testen - leider ohne Erfolg. Es funktioniert nicht einmal, von der ersten Seite zur zweiten zu kommen.
Ich weiß leider nicht, ob ich an meinem mangelnden Wissen, der falschen Herangehensweise, falschen Browsereinstellungen oder Einstellungen der Website scheitere. Könnt ihr mir vielleicht helfen?
 
Ärgerlich. Ist die Seite geheim? Wäre für alle einfacher zu helfen, wenn man das selbst mal nachstellen kann.
 
  • Gefällt mir
Reaktionen: nutrix
das problem auf technischer seite ist, dass deine gewünschte seite erst nach einem sogenannten "post" erstellt wird und die dabei übertragenen daten aus dem formular nicht in der url gespeichert werden. anscheinend kann man das aber mit bookmarklets lösen. ich habe das mal mit hilfe dieser seite probiert, wo du diesen code benutzen kannst:

Javascript:
(function(){
  var post_to_url = function(path, params, method) {
    var openWindow = window.open(path);
    method = method || "post";
    var form = openWindow.document.createElement("form");
    form.setAttribute("method", method);
    form.setAttribute("action", path);
    for(var key in params) {
        var hiddenField = document.createElement("input");
        hiddenField.setAttribute("type", "hidden");
        hiddenField.setAttribute("name", key);
        hiddenField.setAttribute("value", params[key]);
        form.appendChild(hiddenField);
    }
    openWindow.document.body.appendChild(form);
    form.submit();
  };
post_to_url(
  'https://www.schulministerium.nrw.de/BiPo/Stella/online?action=781.7512243877406',
  {stellenart:'3', param68082780119b3a0c:'99',param6607afcc1689ad52:'334002',param25f903862f97361:'300',button_suchen:'Suche+starten'});
})()

wichtig sind diese parameter:
Code:
{stellenart:'3', param68082780119b3a0c:'99',param6607afcc1689ad52:'334002',param25f903862f97361:'300',button_suchen:'Suche+starten'});

die bekommst du, wenn du im browser die entwicklertools öffnest (F12, hier im firefox) und dir die daten beim abschicken des formulars ansiehst (im netzwerk-tab bei "request"):
1723711978604.png


die seite generiert dann einen link, den du als bookmark abspeichern kannst:

1723712045792.png
 
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: trabifant, netzgestaltung, derlorenz und eine weitere Person
Hey, vielen lieben Dank für die Antworten. Ich habe dein Bookmarklet aktiviert und es gestartet, leider passiert nichts. Auch wenn ich im Firefox alle AddOns deaktiviere passiert nichts. hast du eine Idee, woran das liegen kann?
 
Zuletzt bearbeitet:
in der tat funktioniert das script heute nicht mehr. ich hatte mich gestern schon etwas gewundert, warum die parameter kryptische bezeichnungen wie "param68082780119b3a0c" haben anstatt etwas aussagekräftiges wie "stellenart". und tatsächlich sind die namen der parameter anscheinend dynamisch...

man müsste jetzt erst die seite auslesen, um zu schauen wie die parameter heissen und diese daten dann beim abschicken des formulars weiter verwenden. bookmarklets fallen jetzt aber anscheinend raus, weil aus sicherheitsgründen das javascript des bookmarklets die seite nicht laden darf.

als kurzfristige lösung bleibt selenium. da kannst die extension installieren und dann die navigation auf der seite aufzeichnen, speichern und wiederholen lassen:


man könnte das jetzt noch als code z.b. in python exportieren, damit man nicht immer manuell die extension und das projekt laden muss. dazu müsste man python, selenium für python und den (firefox) webdriver für selenium installieren und miit einem rechtsklick auf den test diesen exportieren.
 
  • Gefällt mir
Reaktionen: Micke
Hey, ich hab Selenium ausprobiert und das funktioniert an sich ganz gut. Aber leider ist es immer noch umständlich, jedes Mal Selenium zu starten, die Datei zu öffnen etc.
Von Python habe ich leider (Überraschung...) keinerlei Ahnung.
Ich fragte mich, ob es auch möglich ist, die Inhalte der Seite in eine Art Datenbank oder so zu übertragen, so dass die direkt auch aufbereitet wären (toll wäre z.B. neue Einträge in grün oder so). Hast du vielleicht auch dazu einen Tipp oder verrene ich mich da gerade? LG!
 
ich versuch die tage mal daran zu denken. mit python ist das ganze ziemlich einfach umzusetzen.
 
ich habe selenium mit browser und webdriver in einem docker-container laufen lassen. das kommando dazu ist

Code:
docker run -d -p 4444:4444 -p 7900:7900 --shm-size="2g" --name=selenium-chrome selenium/standalone-chrome

dieses python (getestet mit python 3.10) script (für die abhängigkeiten pip install selenium pandas openpyxl ausführen) verbindet sich dann zu dem webdriver, macht die abfragen und speichert das ergebnis als excel-datei:

Python:
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import Select
from pandas import DataFrame
from datetime import datetime

driver = webdriver.Remote(
    command_executor="http://127.0.0.1:4444",
    options=webdriver.ChromeOptions()
)

try:
    driver.get("https://www.schulministerium.nrw.de/BiPo/Stella/online?action=781.7512243877406")
    driver.find_element(By.XPATH, "//a[contains(text(),'zu den Stellen')]").click()
    driver.find_element(By.XPATH, "//a[contains(text(),'Sonstige Stellen und Tätigkeiten')]").click()

    institution = driver.find_element(By.XPATH, "//select[@id='institution']")
    Select(institution).select_by_visible_text("Sonstiges")

    ort = driver.find_element(By.XPATH, "//select[@id='ort']")
    Select(ort).select_by_visible_text("Aachen")

    umkreis = driver.find_element(By.XPATH, "//input[@id='umkreis']")
    umkreis.clear()
    umkreis.send_keys("100")

    driver.find_element(By.XPATH, "//input[@value='Suche starten']").click()

    driver.find_element(By.XPATH, "//a[text()='500']").click()

    result = {}
    tabelle = driver.find_element(By.XPATH, "//table[@class='tableSuchAnzeige']")
    for idx, elem in enumerate(tabelle.find_elements(By.XPATH, "thead/tr/th")):
        result[elem.text] = []
        for row in tabelle.find_elements(By.XPATH, "tbody/tr"):
            result[elem.text].append(row.find_elements(By.XPATH, "td")[idx].text.strip())

    df = DataFrame(result)
    df.to_excel(f"stella {datetime.now().strftime('%Y-%m-%d')}.xlsx")

except Exception as e:
    print(e)
finally:
    driver.quit()

"ort" und "umkreis" (hier: aachen und 100) müssten natürlich angepasst werden. unter der annahme, dass es nicht mehr als 500 ergebnisse geben wird, habe ich auf die behandlung der ergebnis-pagination verzichtet.
 
Zuletzt bearbeitet:
Zurück
Oben