Saya mencoba mengotomatisasi mengisi formulir Google tetapi saya memiliki masalah untuk memilih jawaban untuk menu drop down. Kelas elemen tidak "pilih" jadi saya tidak bisa menggunakan selenium "cara mudah" untuk memilih nilai yang saya inginkan. Ini skrip saya:

url = "https://docs.google.com/forms/d/e/1FAIpQLSd-GczApKBubTy7ka1ut60waFEdXywuL0dGFQAAZS6_uZKTWQ/viewform"

browser = set_up_driver() # simple browser set up
browser.get(url)
browser.implicitly_wait(5)
time.sleep(3)

box_xpath = "/html/body/div/div[2]/form/div[2]/div/div[2]/div/div/div/div[2]/div/div[1]/div[1]/div[1]"
browser.find_element_by_xpath(box_xpath).click()
xpath = """//*[@id="mG61Hd"]/div[2]/div/div[2]/div/div/div/div[2]/div/div[1]/div[1]/div[4]/span"""
time.sleep(1)
browser.find_element_by_xpath(xpath).click()

XPath sudah benar tetapi ini adalah kesalahan yang dikembalikan ketika mencoba mengklik elemen dalam menu:

selenium.common.exceptions.ElementNotInteractableException: Message: element not interactable
  (Session info: chrome=89.0.4389.114)

Saya cukup yakin bahwa ini bukan kesalahan yang disebabkan oleh elemen yang tidak dimuat Saya dibuka dengan cara apa pun untuk mengklik elemen yang dapat digunakan dalam utas. Saat ini saya menggunakan Pyautogui untuk menggunakan tombol bawah untuk turun di menu dropdown tetapi solusi ini tidak dapat digunakan di utas terpisah. Berikut ini adalah tes Google dari yang saya gunakan untuk menguji skrip pada menu dropdown: https://docs.google.com/forms/d/e/1faipqlsd-gczapkbubty7ka1ut60wafedxywul0dgfqaazs6_uzktwq/viewtform

0
louisab 4 April 2021, 19:13

1 menjawab

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


box_xpath = '//div[@role="option" and @data-value]/span'
wait = WebDriverWait(browser, 10)
wait.until(EC.element_to_be_clickable((By.XPATH, box_xpath))).click()
xpath = '(//div[@role="option" and @data-value]/span)[2]'
wait.until(EC.element_to_be_clickable((By.XPATH, xpath))).click()

Jangan gunakan XPath absolut, gunakan relatif XPath, juga XPath yang Anda gunakan untuk opsi menunjuk pada elemen yang bukan opsi aktual. Ubah indeks dari [2] ke [3] dan seterusnya untuk menemukan opsi yang berbeda

0
PDHide 5 April 2021, 08:03