You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Selenium Python自动化报错:'list'对象无'tag_name'属性求助

问题解决:AttributeError: 'list' object has no attribute 'tag_name'

错误根源

你代码里的web.find_elements(By.XPATH, "...")返回的是元素列表,但Select构造函数需要传入单个WebElement对象,因此触发了该错误。

修复步骤

1. 替换find_elements为find_element

将下拉框元素定位代码改为获取单个元素:

select_element = web.find_element(By.XPATH,"//*[@id='mG61Hd']/div[2]/div/div[2]/div[3]/div/div/div[2]/div/div[1]/div[1]/div[3]/span")

2. 适配Google Forms下拉框特性

Google Forms的下拉框并非标准HTML <select>标签,直接使用Select类无效,需改用点击展开+选择的方式:

# 点击下拉框展开选项列表
dropdown = web.find_element(By.XPATH,"//*[@id='mG61Hd']/div[2]/div/div[2]/div[3]/div/div/div[2]/div/div[1]/div[1]/div[3]/span")
dropdown.click()

# 等待选项加载并选择第一个选项(可根据需求调整XPATH定位目标选项)
option = WebDriverWait(web, 10).until(
    EC.element_to_be_clickable((By.XPATH, "//div[@role='option'][1]"))
)
option.click()

3. 调整代码逻辑位置

你当前把下拉框处理代码放在了循环外部,会导致仅在所有表单循环结束后才执行下拉框操作,需将其移到内部循环中,与姓名、姓氏填写代码放在同一层级。

4. 优化等待方式(推荐)

用显式等待替代time.sleep,让代码更稳定:

# 等待姓名输入框加载并输入内容
name_input = WebDriverWait(web, 10).until(
    EC.visibility_of_element_located((By.XPATH, "//*[@id='mG61Hd']/div[2]/div/div[2]/div/div/div/div[2]/div/div[1]/div/div[1]/input"))
)
name_input.send_keys(entry['name'])

完整修正后的核心代码片段

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

web = webdriver.Chrome("/home/nosra/chromedriver")
df = pd.read_excel('info1.xlsx')
url = ["https://docs.google.com/forms/d/e/1FAIpQLScGMoYVsxtsQ0Je4RTYEZndWrKkdt5jJwXBcMAcOia2WuIRtA/viewform?usp=sf_link"]

for link in url:  
    for i in df.index :
        web.get(link)
        entry = df.loc[i]     
        
        # 填写姓名
        name_input = WebDriverWait(web, 10).until(
            EC.visibility_of_element_located((By.XPATH, "//*[@id='mG61Hd']/div[2]/div/div[2]/div/div/div/div[2]/div/div[1]/div/div[1]/input"))
        )
        name_input.send_keys(entry['name'])
        
        # 填写姓氏
        last_name_input = WebDriverWait(web, 10).until(
            EC.visibility_of_element_located((By.XPATH, "//*[@id='mG61Hd']/div[2]/div/div[2]/div[2]/div/div/div[2]/div/div[1]/div/div[1]/input"))
        )
        last_name_input.send_keys(entry['lastName'])
        
        # 处理下拉框
        dropdown = WebDriverWait(web, 10).until(
            EC.element_to_be_clickable((By.XPATH, "//*[@id='mG61Hd']/div[2]/div/div[2]/div[3]/div/div/div[2]/div/div[1]/div[1]/div[3]/span"))
        )
        dropdown.click()
        
        # 选择目标选项
        option = WebDriverWait(web, 10).until(
            EC.element_to_be_clickable((By.XPATH, "//div[@role='option'][1]"))
        )
        option.click()
        
        # 可选:添加表单提交逻辑
        # submit_btn = WebDriverWait(web, 10).until(EC.element_to_be_clickable((By.XPATH, "//div[@role='button' and text()='提交']")))
        # submit_btn.click()

内容的提问来源于stack exchange,提问作者Nosra Trabelsi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 01:24:14