尝试自动填写谷歌表单文本框时如何修复Selenium上的“IndexError”? 我使用检查元素来查找文本框的类名

问题描述

本质上,我试图通过使用 selenium 和检查元素自动/自动填充谷歌表单来查找类名。当我尝试将文本输入到 google 表单的“简短回答”部分时,我特别难以找到“IndexError”问题的解决方案。我是 Python 的初学者,很抱歉,如果这可能是一个非常低级的问题。

from selenium import webdriver

option = webdriver.ChromeOptions()
option.add_argument("-incognito")

browser = webdriver.Chrome(executable_path="path to selenium")

option = webdriver.ChromeOptions()
option.add_argument("-incognito")
email = "my email address to sign into the google form"

browser = webdriver.Chrome(executable_path="path to selenium",options=option)
browser.get('url of google form')

sign_in = browser.find_elements_by_class_name("whsOnd zHQkBf")
sign_in[0].send_keys(email)

Next = browser.find_elements_by_class_name("VfPpkd-RLmnJb")
Next[0].click()

textBoxes = browser.find_elements_by_class_name("quantumWizTextinputPaperinputInput exportInput")
textBoxes[0].send_keys("name")
    
radio_buttons = browser.find_elements_by_class_name("freebirdFormviewerComponentsQuestionCheckBoxRoot")
radio_buttons[1].click()


submit=browser.find_element_by_class_name("appsMaterialWizButtonPaperbuttonLabel quantumWizButtonPaperbuttonLabel exportLabel")
submit.click()

解决方法

您确定 sign_in 中确实存储了任何内容吗?在我看来,这些类名是自动生成的,当页面加载,所以它可能不存在实际上的类名“whsOnd zHQkBf”网络元素。最好使用 xpath 并使用短格式输入字段的相对路径。这样,即使页面的总体布局发生变化,您仍然可以找到您的网络元素,从而使解决方案更加强大。

更新:

继直接从等待硒的Python API文档取出并可以用于修复“NoSuchElement”异常或“元件不相互作用”在特定情况下。代码

'''

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

driver = webdriver.Firefox()
driver.get("http://somedomain/url_that_delays_loading")
try:
    element = WebDriverWait(driver,10).until(
        EC.presence_of_element_located((By.ID,"myDynamicElement"))
    )
finally:
    driver.quit()

'''

您可以使用 By.xpath 或任何其他过多的标识符。如果此代码超时,则您要查找的元素不存在。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...