Python Selenium自动化访问ChatGPT的实战指南与避坑技巧

2次阅读
没有评论

共计 2252 个字符,预计需要花费 6 分钟才能阅读完成。

image.webp

1. 背景与痛点

在日常开发中,我们经常需要与 ChatGPT 进行交互测试或批量处理任务。但手动操作存在明显局限:

Python Selenium 自动化访问 ChatGPT 的实战指南与避坑技巧

  • 重复性问题:每次对话需重新输入指令,无法保存上下文
  • 效率瓶颈:人工等待响应时间不可控,无法实现 24 小时运行
  • 规模限制:难以同时管理多个会话或账号

自动化需求由此产生,但面临三大技术挑战:

  1. 动态验证码拦截
  2. 异步加载元素定位
  3. 会话状态保持

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 驱动安装

  1. 下载对应浏览器驱动(以 Chrome 为例)
  2. 配置系统 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. 结语

本文方案可扩展应用于:

  1. 结合 OCR 处理图形验证码
  2. 集成 LangChain 构建 AI 工作流
  3. 对接企业 IM 自动应答系统

建议在实际应用中持续监控运行日志,根据具体场景调整参数。遇到新问题欢迎在评论区交流讨论。

正文完
 0
评论(没有评论)