[FIXED] Verwenden von Python / Selenium zum Lesen von Optionen

Ausgabe

Ich habe Probleme beim Abrufen von Informationen aus einer Tabelle mit Selenium. Der HTML-Code sieht in etwa so aus:

<select id="software_version" name="software_version" onchange="CheckDropDownValueUIUpdate('software_version', 'software_version_image','software_version_message', 'Software Version');" style="visibility: visible;">
<option value="none">
Select a Version</option>

<option value="1732732">
12</option>

<option value="456456">
14.0.69</option>

<option value="68767">
13.62</option>

<option value="678934">
22.0.33</option>
</select>

Rechtsklick und Auswahl von X-Path in Chrome für 14.0.69 würde Folgendes zurückgeben:

//*[@id="software_version"]/option[3]

Also habe ich es in meinen Code eingefügt:

try:
    query = driver.find_element("xpath", '//*[@id="software_version"]/option[3]')
    SoftwareVersion = query.text
    print(SoftwareVersion)
    
except NoSuchElementException:
    new_row = {'Software': dfSoftwareName, 'Version': "Not Available"}

Dies brachte kein Ergebnis.

Also habe ich ein wenig gelesen und etwas über selectByIndex gelernt und Folgendes versucht:

try:
    query = driver.find_element("xpath", '//*[@id="software_version"]')
    query.selectByIndex(3);
    SoftwareVersion = query.text
    print(SoftwareVersion)

except NoSuchElementException:
    new_row = {'Software': dfSoftwareName, 'Version': "Not Available"}

Dies ergab jedoch das Ergebnis “AttributeError: ‘WebElement’ object has no attribute ‘selectByIndex'”. An diesem Punkt weiß ich nicht, wo ich suchen soll, da die erste Option mir kein Feedback gab. Vielen Dank für alle Vorschläge, die Sie machen können.

Lösung

Sie müssen Folgendes importieren:

from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait as wait
from selenium.webdriver.support import expected_conditions as EC

Und dann können Sie eine Option wie diese finden:

options = WebDriverWait(driver, 20).until(EC.presence_of_all_elements_located((By.XPATH, "//select[@id='software_version']/option")))

Sie können die vollständige Liste der Optionen ausdrucken:

print('options:', [x.text for x in options])

Oder Sie drucken sich ein individuelles aus:

print('Third from the list:', options[2].text)

Sie können sie nach Text filtern:

the_one_youre_searching = [x for x in options if '14.0.69' in x.text][0]

Sie können ihre Attribute erhalten:

value_attribs = [x.get_attribute("value") for x in options]

Selenium-Dokumentation finden Sie unter https://www.selenium.dev/documentation/


Beantwortet von –
Barry der Platipus


Antwort geprüft von –
Katrina (FixError Volunteer)

0 Shares:
Leave a Reply

Your email address will not be published. Required fields are marked *

You May Also Like