使用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
相关产品推荐
相关产品推荐

