Python调用GPT:保持登陆状态,重复对话,复制对话结果,自动退出

背景

有一些重复性的操作想让GPT执行
不想一个个点

实现功能:

  1. 保持登陆状态,
  2. 重复对话,
  3. Python输入对话内容,
  4. 复制对话结果,
  5. 自动退出

来源

零基础教学:如何用 50 行 Python 代码调用私有 GPTs?
直接使用还是存在一些问题,进行了修改

环境安装

一定注意第三句。安装对应的浏览器组件,不然用不了。

pip install pyperclip
pip install playwright
playwright install

Python实现

  1. 首先执行login,打开网页后需要登陆自己的GPT账号
  2. 然后关闭网页,停止程序,注释掉login语句
  3. 然后执行,在Python中可以进一步选择自己想要对话的问题,或者输入n退出
# 导入所需的模块
import time  # 用于睡眠和延迟操作
import pyperclip  # 用于与剪贴板交互
from playwright.sync_api import sync_playwright  # 用于浏览器自动化

# 创建保存历史数据的临时文件夹
if not os.path.exists('gpts_firefox_dir'):
    os.makedirs('gpts_firefox_dir')

# 定义登录函数
def login():
    # 使用Playwright同步API
    with sync_playwright() as p:
        # 启动Firefox浏览器,并创建一个持久的上下文环境
        context = p.firefox.launch_persistent_context(
            './gpts_firefox_dir',  # 浏览器数据存储目录
            headless=False,  # 以有头模式运行,方便调试
            slow_mo=500  # 每步操作之间延迟500毫秒,方便观察
        )
        # 获取第一个页面
        page = context.pages[0]
        # 访问OpenAI的ChatGPT网页
        page.goto('https://chat.openai.com/')

        input('等待登陆,登录后请注释login()这一行,之后会保持登陆')

# 调用登录函数,只需要登陆一次,就不需要再次登陆了
login()

# 定义查询函数
def query():
    # 使用Playwright同步API
    with sync_playwright() as p:
        # 启动Firefox浏览器,并创建一个持久的上下文环境
        browser = p.firefox.launch_persistent_context(
            './gpts_firefox_dir',  # 浏览器数据存储目录
            headless=False,  # 以有头模式运行,方便调试
            slow_mo=500  # 每步操作之间延迟500毫秒,方便观察
        )
        # 获取第一个页面
        page = browser.pages[0]
        # 访问OpenAI的ChatGPT网页
        page.goto('https://chat.openai.com/')
        time.sleep(2)  # 等待页面加载

        # # 在手动关闭浏览器之前,保持浏览器打开状态
        # input("浏览器已启动并登录,请手动操作完成后按回车键继续...")

        # 在页面的文本区域输入问题
        page.query_selector("#prompt-textarea").fill("告诉我,你的知识库截止日期是?")
        # 点击发送按钮
        page.wait_for_selector('button[data-testid="fruitjuice-send-button"]').click()
        # time.sleep(10)  # 等待响应

        # 这个选择器需要从网页中一个个找
        # 定义复制按钮的选择器
        copy_button_selector = 'button[class="rounded-lg text-token-text-secondary hover:bg-token-main-surface-secondary"]'
        page.wait_for_selector(copy_button_selector)
        # 获取所有符合选择器的复制按钮
        copy_buttons = page.query_selector_all(copy_button_selector)
        print(copy_buttons)
        # 点击最后一个复制按钮(获取最新响应)
        (copy_buttons[len(copy_buttons) - 3]).click()
        time.sleep(1)  # 等待复制操作完成
        # 从剪贴板获取内容
        clipboard_content = pyperclip.paste()
        # 打印剪贴板内容
        print(clipboard_content)

        # 控制循环,询问用户是否继续等待
        while 1:
            str = input('等待中,是否继续等待?【问题】/【n】。\n\n请输入:')  # 控制休眠时间
            if str == 'n':
                break
            # 在页面的文本区域输入问题
            page.query_selector("#prompt-textarea").fill(str)
            # 点击发送按钮
            page.wait_for_selector('button[data-testid="fruitjuice-send-button"]').click()
            # time.sleep(10)  # 等待响应

            # 这个选择器需要从网页中一个个找
            # 定义复制按钮的选择器
            copy_button_selector = 'button[class="rounded-lg text-token-text-secondary hover:bg-token-main-surface-secondary"]'
            num = len(page.query_selector_all(copy_button_selector))
            # 等待GPT响应,直接出现新的复制按键
            while 1:
                copy_buttons = page.query_selector_all(copy_button_selector)
                if len(copy_buttons) > num:
                    break
                time.sleep(1)  # 等待复制操作完成
            # 点击最后一个复制按钮(获取最新响应)
            (copy_buttons[len(copy_buttons) - 3]).click()
            time.sleep(1)  # 等待复制操作完成
            # 从剪贴板获取内容
            clipboard_content = pyperclip.paste()
            # 打印剪贴板内容
            print(clipboard_content)
        # 关闭页面和浏览器
        page.close()
        browser.close()

# 调用查询函数
query()

调用结果:
在这里插入图片描述
在这里插入图片描述

  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值