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
    评论
好的,我可以帮您编写一个Python程序,使用OpenAI公司开发GPT-3 API,实现人机对话。以下是程序的具体实现,代码中有注释说明每个步骤的作用: ```python import openai import time # 设置OpenAI API key openai.api_key = 'YOUR_API_KEY_HERE' # 与API建立连接 def get_openai_response(prompt): response = openai.Completion.create( engine="davinci", prompt=prompt, temperature=0.5, max_tokens=1024, top_p=1, frequency_penalty=0, presence_penalty=0 ) return response # 初始化对话,获取OpenAI API的回复 response = get_openai_response("Hello, how can I assist you today?") # 输出OpenAI API的回复 print(response.choices[0].text) # 进入对话循环 while True: # 获取用户输入 user_input = input('>You: ') # 构建OpenAI API的请求字符串 prompt = f"Human: {user_input}\nAI:" # 获取OpenAI API的回复并输出 response = get_openai_response(prompt) print(response.choices[0].text.strip()) # 等待一秒钟,避免过快的API请求 time.sleep(1) ``` 在上述代码中,我们使用了`openai`库来连接GPT-3 API。首先,我们设置了API key,然后定义了一个`get_openai_response`函数,该函数接受一个字符串作为输入(表示用户的问题),并返回一个OpenAI API的回复。在函数内部,我们使用`openai.Completion.create`方法来调用API并获取回复。我们设置了一些API请求参数,如`engine`表示模型类型,`temperature`表示生成文本的随机性,`max_tokens`表示最大生成文本长度,`top_p`表示用于削弱低概率词汇的概率值,`frequency_penalty`和`presence_penalty`分别表示对重复和相似文本的惩罚。 然后,我们初始化对话并获取OpenAI API的第一次回复,这里我们简单地提示用户输入问题。接着,我们进入对话循环。在每一次循环中,我们首先获取用户输入,并将其与前面的对话历史拼接起来,作为OpenAI API的请求字符串。然后,我们再次调用`get_openai_response`函数获取API的回复,并输出到控制台。最后,我们等待一秒钟,避免过快的API请求。 当用户想要结束对话时,可以使用特殊的命令(例如`exit`或`quit`)来退出程序。 上述代码可以实现一个简单的人机对话,但需要注意的是,GPT-3 API的使用需要付费,并且在某些情况下可能会受到访问限制。因此,在实际应用中需要考虑这些因素。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值