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

使用Python Selenium连接Gemini网页聊天遇TimeoutException问题求助

问题分析与解决办法

你的TimeoutException本质是Selenium找不到指定元素,核心原因及对应解决办法如下:

1. 元素选择器已失效

Gemini网页的DOM结构会随版本更新,你使用的旧选择器已无法匹配当前页面元素,替换为以下有效选择器:

  • 输入框:div[contenteditable="true"][role="textbox"]
  • 发送按钮:button[aria-label="Send message"]
  • 模型回复:div[data-testid="model-response"]

2. 未处理登录验证

Gemini必须登录Google账号才能使用,headless模式下默认无登录状态,会被登录弹窗拦截操作。解决方式二选一:

  • 手动复用Cookie:先在非headless模式下打开Gemini并登录,导出Cookie后在代码中加载(避免重复登录)
  • 自动登录(谨慎使用):添加代码自动填写Google账号密码,但注意Google有严格反爬机制,可能触发人机验证

3. Headless模式配置不足

Firefox的headless模式默认窗口尺寸过小,部分元素可能不渲染;同时缺少真实浏览器标识,易被检测。需补充配置:

options.add_argument("--width=1920")
options.add_argument("--height=1080")
options.add_argument("user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/115.0")

修改后的完整代码

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

def send_message(prompt): 
    options = Options() 
    options.headless = True 
    # 补充headless模式配置
    options.add_argument("--width=1920")
    options.add_argument("--height=1080")
    options.add_argument("user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/115.0")
    
    driver = webdriver.Firefox(options=options)

    try: 
        driver.get("https://gemini.google.com")
        
        # 【可选】加载已保存的Cookie,跳过登录
        # cookies = [{"name": "...", "value": "..."}] # 替换为你导出的Cookie
        # for cookie in cookies:
        #     driver.add_cookie(cookie)
        # driver.refresh()

        # 等待输入框加载并输入内容
        text_area = WebDriverWait(driver, 20).until( 
            EC.element_to_be_clickable((By.CSS_SELECTOR, 'div[contenteditable="true"][role="textbox"]')) 
        ) 
        text_area.send_keys(prompt)

        # 点击发送按钮
        send_button = WebDriverWait(driver, 20).until( 
            EC.element_to_be_clickable((By.CSS_SELECTOR, 'button[aria-label="Send message"]')) 
        ) 
        send_button.click()

        # 等待回复加载完成并获取内容
        response_element = WebDriverWait(driver, 60).until( 
            EC.visibility_of_element_located((By.CSS_SELECTOR, 'div[data-testid="model-response"]')) 
        )
        response_text = response_element.text 
        return response_text 
    finally: 
        driver.quit()

def main(): 
    prompt = input("Ask Gemini: ")
    response_text = send_message(prompt)
    print("\nResponse from Gemini:") 
    print(response_text)

if __name__ == "__main__": 
    main()

额外注意事项

  • 若使用Cookie复用,需确保Cookie的domain设置为.google.com且在有效期内
  • Google会频繁更新反爬机制,若再次出现元素找不到的情况,需重新用浏览器开发者工具定位最新元素选择器
  • 避免频繁发送请求,否则可能触发账号限制

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 00:05:31