Auswählen eines speziellen Google Form-Dropdowns mit Selen ohne Auswahl-Tag in Python

Nov 25 2020

Ich habe versucht, eine Möglichkeit zu finden, eine Dropdown-Option aus Google Forms über Selen und Python auszuwählen, war jedoch bisher erfolglos.

Ich habe verschiedene Möglichkeiten ausprobiert, einschließlich der Select-Klasse (die aufgrund des Dropdown-Formulars, das das select-Tag nicht verwendet, nicht funktioniert). Sowie XPATH. Sie sind jedoch nur so weit gekommen, auf das Dropdown-Menü zu klicken, können jedoch die Optionen in der Dropdown-Liste nicht auswählen. Jede Hilfe wäre sehr dankbar!

Ich muss in der Lage sein, basierend auf dem Text / Wert in den verschiedenen Optionen anzugeben, welche Dropdown-Option ausgewählt werden soll.

CODE:

browser.find_element_by_xpath("//div[@class='quantumWizMenuPaperselectOptionList']").click() 
browser.find_element_by_xpath("//div[@class='freebirdThemedSelectOptionDarkerDisabled']/div[@class='quantumWizMenuPaperselectOption'][@data-value='1.05pm - 3.55pm']").click()

Der Fehler, den ich bekomme, ist, dass kein solches Element gefunden wird, obwohl dies der XPATH ist, den ich durch entsprechende Überprüfung des Dropdown-Menüs gefunden habe.

Ich habe hier ein Beispielformular als Referenz erstellt: https://forms.gle/prBMqgVVFNv5KWQQA

Dies hat nicht geholfen, da die Select-Klasse verwendet wird. Bitte kennzeichnen Sie diese Frage nicht als Duplikat

Auswählen / Abrufen der Dropdown-Option in Selen 2

Wie wähle ich mit Python mit Selen einen Dropdown-Menüwert aus?

Die Verwendung eines Webdriverwait schien auch nicht den in diesem Beitrag beschriebenen Trick zu tun:

Automatisieren Sie das Dropdown-Menü in Selen ohne Auswahl

Antworten

1 SariqShaikh Nov 26 2020 at 07:50

Das Problem ist, dass das Auswahlfeld nicht angezeigt wird, selbst wenn Ihr xpath korrekt ist, bis Sie mit der Maus über dieses Element fahren. Wenn Sie mit der Maus über dieses Element fahren, kann es angeklickt werden. Sie können den folgenden Code verwenden, um den Mauszeiger über dieses Auswahlfeldelement zu bewegen und dann zu versuchen, auf das Element zu klicken und es auszuwählen

selectBox = WebDriverWait(browser, 30).until(EC.presence_of_element_located((By.XPATH, "//div[@role='listbox']")))
action = ActionChains(browser);
action.move_to_element(selectBox).perform()

Vollständiger Code hier:

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

browser = webdriver.Chrome()
url = 'https://docs.google.com/forms/d/e/1FAIpQLScosZjmDrvgUvh77tXsaAb24hKVgaBnjJfJz2BX1PvoqIO1Ow/viewform'
text = '1.05pm-3.55pm'
browser.maximize_window()
browser.get(url)
selectBox = WebDriverWait(browser, 30).until(EC.presence_of_element_located((By.XPATH, "//div[@role='listbox']")))
action = ActionChains(browser);
action.move_to_element(selectBox).perform()
WebDriverWait(browser, 20).until(EC.element_to_be_clickable((By.XPATH, "//div[@role='listbox']")))
selectBox.click()

selectionXpath = "//div[@class='exportSelectPopup quantumWizMenuPaperselectPopup appsMaterialWizMenuPaperselectPopup']//span[@class='quantumWizMenuPaperselectContent exportContent' and text()='"+text+"']"
selection = WebDriverWait(browser, 30).until(EC.presence_of_element_located((By.XPATH, selectionXpath)))
selection.click()

Beachten Sie, dass ich nicht überprüft habe, ob bei dieser Auswahl die Informationen im Formular erhalten bleiben, da ich das Formular nicht gesendet habe. Sie können es testen und überprüfen.