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)