首页 > 解决方案 > Selenium“元素不可交互异常”在谷歌表单上使用sendkeys?

问题描述

我正在尝试在 python3.9 中使用 selenium 填写谷歌表单

https://docs.google.com/forms/d/e/1FAIpQLSead7qqhVWP4m4q9Y71Wu9kr2lbCQXvY4ge0OdFg9fI0SQYYA/viewform

但是我在form[0].send_keys('222')的“元素不可交互异常”处收到错误消息

from time import sleep
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from constants import FORM_URL, CHROME_DRIVER_LOCATION


class FillForm:
    def __init__(self, form = FORM_URL):
        self.driver = webdriver.Chrome(executable_path=CHROME_DRIVER_LOCATION)
        self.driver.get(form)

    def fill_form(self, data: dict):
        form = self.driver.find_elements_by_class_name('exportInput')
        form[0].send_keys('222') #ERROR IS HERE

我阅读了线程 b 来解决问题,但似乎我做错了什么

我在stackoverflow上读到的线程你 如何修复“元素不可交互”异常?

我做错了什么?

标签: pythonpython-3.xseleniumselenium-webdriverselenium-rc

解决方案


您可能fill_form在初始化FillForm对象后立即调用。尝试向您的fill_form函数添加显式等待。

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

class FillForm:
    def __init__(self, form):
        self.driver = webdriver.Chrome()
        self.driver.get(form)

    def fill_form(self, data: list, class_name='exportInput'):
        WebDriverWait(self.driver, 20).until(EC.element_to_be_clickable((By.CLASS_NAME, 'exportInput')))
        form = self.driver.find_elements_by_class_name(class_name)
        for i, value in enumerate(data):
            form[i].send_keys(value) 

推荐阅读