共计 2252 个字符,预计需要花费 6 分钟才能阅读完成。
1. 背景与痛点
在日常开发中,我们经常需要与 ChatGPT 进行交互测试或批量处理任务。但手动操作存在明显局限:

- 重复性问题:每次对话需重新输入指令,无法保存上下文
- 效率瓶颈:人工等待响应时间不可控,无法实现 24 小时运行
- 规模限制:难以同时管理多个会话或账号
自动化需求由此产生,但面临三大技术挑战:
- 动态验证码拦截
- 异步加载元素定位
- 会话状态保持
2. 技术选型
2.1 Selenium 优势
- 浏览器原生支持:真实模拟用户操作
- 多语言兼容:Python 生态完善
- 调试方便:可可视化运行过程
2.2 对比 Playwright
| 特性 | Selenium | Playwright |
|---|---|---|
| 执行速度 | 中等 | 较快 |
| 内存占用 | 较高 | 较低 |
| 验证码支持 | 需扩展 | 内置代理 |
| 跨域处理 | 复杂 | 简单 |
对于需要精细控制浏览器场景,Selenium 仍是首选。
3. 核心实现
3.1 环境配置
推荐使用 conda 创建独立环境:
conda create -n chatgpt_auto python=3.8
conda install -c conda-forge selenium
3.2 驱动安装
- 下载对应浏览器驱动(以 Chrome 为例)
- 配置系统 PATH 或指定 executable_path
from selenium import webdriver
driver = webdriver.Chrome(executable_path='./chromedriver')
3.3 元素定位
优先使用 CSS 选择器:
textarea = driver.find_element_by_css_selector('textarea[id="prompt-textarea"]')
动态元素建议结合显式等待:
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
element = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.ID, "dynamic-element"))
)
4. 完整代码示例
import time
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
class ChatGPTAutomator:
def __init__(self):
self.driver = webdriver.Chrome()
self.driver.implicitly_wait(15)
def login(self, username, password):
self.driver.get("https://chat.openai.com")
# 实际项目需替换为具体登录逻辑
time.sleep(3) # 演示用延时,生产环境应改用显式等待
def send_message(self, prompt):
textarea = self.driver.find_element(By.TAG_NAME, "textarea")
textarea.send_keys(prompt)
textarea.send_keys(Keys.RETURN)
def get_response(self):
# 等待最新回复生成
responses = self.driver.find_elements(
By.CSS_SELECTOR,
"div.markdown.prose"
)
return responses[-1].text if responses else ""
# 使用示例
bot = ChatGPTAutomator()
bot.login("your_username", "your_password")
bot.send_message("Python 如何实现快速排序?")
print(bot.get_response())
5. 性能优化
5.1 请求间隔控制
import random
def random_delay():
time.sleep(random.uniform(1.5, 3.5))
5.2 无头模式配置
options = webdriver.ChromeOptions()
options.add_argument('--headless')
options.add_argument('--disable-gpu')
driver = webdriver.Chrome(options=options)
6. 避坑指南
6.1 IP 封禁预防
- 使用优质代理 IP 池
- 设置合理的请求频率
- 模拟人类操作间隔
6.2 指纹伪装
options.add_argument("user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) ...")
options.add_argument("--disable-blink-features=AutomationControlled")
7. 安全考量
- 使用 dotenv 管理敏感信息
- 对话记录加密存储
- 定期更换会话 cookies
8. 结语
本文方案可扩展应用于:
- 结合 OCR 处理图形验证码
- 集成 LangChain 构建 AI 工作流
- 对接企业 IM 自动应答系统
建议在实际应用中持续监控运行日志,根据具体场景调整参数。遇到新问题欢迎在评论区交流讨论。
正文完
