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

求助:基于Selenium的Google Forms自动填充代码优化与排查

Google Forms 自动提交:问题排查与优化方案

原代码的关键问题

  • 效率极低+反爬风险高:每次循环都重启Chrome,不仅速度慢到离谱,频繁的浏览器启停很容易被Google的反自动化机制盯上,轻则提交失败,重则直接限制访问。
  • 元素定位不靠谱:
    • 没加等待逻辑,页面还没加载完就去定位元素,十有八九会抛出NoSuchElementException;
    • 用选项的显示文本去匹配data-value是错误逻辑——Google Forms的data-value存的是选项的内部标识,和你看到的显示文本根本不是一回事,这会导致选项点不到。
  • 提交流程不严谨:点完提交直接关浏览器,完全没确认提交是否成功,可能会出现提交半截就中断的情况。

优化后的代码实现

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
import random
import time

# 注意:替换成你表单选项实际的data-value值(按F12查看元素属性)
options = ["选项1的data-value值", "选项2的data-value值", "选项3的data-value值", "选项4的data-value值"]
form_url = "https://docs.google.com/forms/d/e/1FAIpQLSe8Wj3QAV0LPYGPODkNCK_JSfoacBWUX_3Uq7gTlJB9icBgGQ/viewform"
total_submissions = 100

# 初始化一次浏览器,全程复用实例
driver = webdriver.Chrome()
wait = WebDriverWait(driver, 10)  # 最长等待10秒

try:
    for idx in range(total_submissions):
        email = f"test{idx}@example.com"
        driver.get(form_url)
        
        # 等待邮箱输入框加载完成后输入内容
        email_input = wait.until(EC.presence_of_element_located((By.NAME, "entry.1170127610")))
        email_input.clear()
        email_input.send_keys(email)
        
        # 随机选择一个选项并点击
        chosen_option = random.choice(options)
        option_btn = wait.until(EC.element_to_be_clickable((By.XPATH, f"//div[@data-value='{chosen_option}']")))
        option_btn.click()
        
        # 等待提交按钮可点击后完成提交
        submit_btn = wait.until(EC.element_to_be_clickable((By.XPATH, "//span[text()='提交']")))
        submit_btn.click()
        
        # 等待提交成功提示出现,确保本次提交完成
        wait.until(EC.presence_of_element_located((By.XPATH, "//div[contains(text(), '已提交')]")))
        
        # 增加随机延迟,模拟真人操作节奏
        time.sleep(random.uniform(1, 3))
        print(f"第{idx+1}次提交完成")
        
finally:
    # 无论执行结果如何,最终关闭浏览器释放资源
    driver.quit()

核心优化说明

  • 复用浏览器实例:只初始化一次Chrome,循环内仅刷新表单页面,效率至少提升10倍,同时大幅降低被反爬检测的概率。
  • 显式等待替代无等待逻辑:用WebDriverWait等待元素加载完成/可点击,彻底解决因页面加载延迟导致的元素定位失败问题。
  • 修正选项定位逻辑:打开表单按F12查看选项元素的data-value属性值,替换到options列表中,确保精准定位选项。
  • 提交确认机制:等待提交成功的提示元素出现后再进入下一次循环,保证每一次提交都完整完成。
  • 模拟真人操作:添加随机延迟,避免操作节奏过于机械触发反爬机制。

额外注意事项

  • 提交100次大概率会触发Google的验证码验证,此时需手动处理或接入验证码识别工具(如Anti-Captcha)。
  • 可启用Chrome无头模式减少资源占用,需注意无头模式也可能被检测,可搭配反检测参数:
    chrome_options = webdriver.ChromeOptions()
    chrome_options.add_argument("--headless=new")
    chrome_options.add_argument("--disable-blink-features=AutomationControlled")
    driver = webdriver.Chrome(options=chrome_options)
    

内容的提问来源于stack exchange,提问作者Hồ Thánh

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 04:31:01