Python Selenium find_element_by

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
nino_
User
Beiträge: 17
Registriert: Sonntag 1. August 2021, 17:38

Hallo,

wie kann ich mit der driver.find_element_by_... funktion nach, aus dem Quelltext <input type="checkbox", suchen und diese anklicken?

Danke <3
rogerb
User
Beiträge: 878
Registriert: Dienstag 26. November 2019, 23:24

@nino_,

Zum finden von Elementen gibt es eine ganze Reihe von Funktionen.
https://selenium-python.readthedocs.io/ ... ments.html

Da du hier nur den "input" Tag hast, würde wahrscheinlich
'find_element_by_tag_name' oder 'find_elements_by_tag_name'
geeignet sein.

Einmal bekommst du das erste "input" element und einmal bekommst du eine Lister aller "input" elemente.

Es währe besser wenn du noch eine "id" oder "class" oder "name" hättest um das gewünschte Element zu identifizieren.
Benutzeravatar
__blackjack__
User
Beiträge: 13006
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Oder erst ein übergeordnetes Element mit einem solchen Attribut und von da aus dann weitersuchen.
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
nino_
User
Beiträge: 17
Registriert: Sonntag 1. August 2021, 17:38

Danke für die Antworten,
von dem Element habe ich folgendes:
<input type="checkbox" value="43060387" class="vehicle_checkbox" id="vehicle_checkbox_43060387" name="vehicle_ids[]"

Es bleibt jedoch nur type, class, und name gleich.
Value und id verändern sich jedesmal.
Und über den Xpath kommt auch immer nur "no such element: Unable to locate element" ...

Was könnte ich stattdessen schreiben?
__deets__
User
Beiträge: 14494
Registriert: Mittwoch 14. Oktober 2015, 14:29

Ohne den Quelltext der Seite zu sehen, kann man das nicht beurteilen.
rogerb
User
Beiträge: 878
Registriert: Dienstag 26. November 2019, 23:24

@nino_,

über xpath könnte so etwas funktionieren:

Code: Alles auswählen

driver.find_element_by_xpath("//input[contains(@id, 'vehicle_checkbox_')]")
Also wenn man davon ausgeht, dass zumindest "vehicle_checkbox_" immer vorkommt und sich nur die Zahlenkolonne ändert.

Ansonsten, wie von __blackjack__ vorgeschlagen, auf das übergeordnete element, gehen. Das dürfte ein (hoffentlich eindeutiges) "form" oder "div" sein. Dann über die darunterliegenden "inputs" iterieren.
nino_
User
Beiträge: 17
Registriert: Sonntag 1. August 2021, 17:38

Ich kann den Code leider nicht kopieren... Kann ich hier ein Bild als Antwort irgendwie anhängen?
rogerb
User
Beiträge: 878
Registriert: Dienstag 26. November 2019, 23:24

@nino_,

Du kannst ein Bild verlinken, aber das ist nicht optimal.
Warum kannst du den Code nicht kopieren?
Notfalls kopiere einfach den wichtigsten Teil.
__deets__
User
Beiträge: 14494
Registriert: Mittwoch 14. Oktober 2015, 14:29

Wenn Bild, dann bei einem Bild-Hoster hochladen (imgur zb), und dann den Link *auf das Bild*, nicht auf die imgur-Seite, in ein [ img ]-Tag packen.
nino_
User
Beiträge: 17
Registriert: Sonntag 1. August 2021, 17:38

Also hier das Bild: [https://postimg.cc/CzWFKD53]
Ziel ist es das Selenium die Checkbox, also die drei grau-hinterlegten Zeilen erkennt, und anklickt...
Danke für euere Hilfe, so leicht wie es auf den ersten Blick vielleicht erscheint ist es nicht ;)
Sirius3
User
Beiträge: 17712
Registriert: Sonntag 21. Oktober 2012, 17:20

Wo ist das Problem, diesen Abschnitt als Text hier ins Forum zu kopieren?
Und sowohl der Vorschlag von rogerb als auch von __blackjack__ sind mögliche Lösungen.
Warum probierst Du das nicht einfach aus?
nino_
User
Beiträge: 17
Registriert: Sonntag 1. August 2021, 17:38

Ich die vorgeschlagen Lösungen probiert funktionieren nur nicht so ganz. D. H. Die Checkbox wird nicht angeklickt :(
Sirius3
User
Beiträge: 17712
Registriert: Sonntag 21. Oktober 2012, 17:20

Was hast Du konkret probiert?
nino_
User
Beiträge: 17
Registriert: Sonntag 1. August 2021, 17:38

Mehrere dinge, hab nur die zwei hier gespeichert.. Funktionieren jedoch nicht :(
driver.find_element_by_xpath("/html/body/div[1]/div[4]/div[2]/form[2]/div[4]/div/div[8]/table/tbody/tr[1]/td[1]").click()
driver.find_element_by_xpath("//input[contains(@id, 'vehicle_checkbox_')]").click()

Oben findest du den Link zum Screenshot, wenn du mir helfen möchtest :)
nino_
User
Beiträge: 17
Registriert: Sonntag 1. August 2021, 17:38

Im Terminal gibt er mir das hier aus:

...
Traceback (most recent call last):
File "c:\Users\Nino\OneDrive\Desktop\MyVSCode\main.py", line 62, in <module>
SchnellstesEinsatzmittel = driver.find_element_by_xpath("//input[contains(@id, 'vehicle_checkbox_')]").click()
File "D:\Python\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 394, in find_element_by_xpath
return self.find_element(by=By.XPATH, value=xpath)
File "D:\Python\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 976, in find_element
return self.execute(Command.FIND_ELEMENT, {
File "D:\Python\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 321, in execute
self.error_handler.check_response(response)
File "D:\Python\lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 242, in check_response
raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"xpath","selector":"//input[contains(@id, 'vehicle_checkbox_')]"}
(Session info: chrome=92.0.4515.131)
rogerb
User
Beiträge: 878
Registriert: Dienstag 26. November 2019, 23:24

@nino_, die xpath Suche scheint mir richtig.

Hast du es mal mit einem übergeordneten Element versucht?


Kannst du deinen Code posten?
Antworten