问题描述
本质上,我试图通过使用 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 或任何其他过多的标识符。如果此代码超时,则您要查找的元素不存在。