每天都要刷刷知乎,有一天突发奇想,要不要试试让大模型claude自动回答知乎提问
之前搞过chatgpt自动回答知乎提问,奈何chatgpt给我封号了以及封了API,所以这次使用chatgpt的强有力竞争者claude
主要思路
使用selenium配合google chrome的webdriver作为工具,爬取知乎的问题推荐栏给我的提问以及链接,将问题输入给claude的页面,获得回答后爬取claude的回答输入到知乎的问题回答栏,并发表。以此实现知乎推荐提问的自动回答。
代码展示
第一部分,配置selenium默认信息,登录claude
此代码在进入登录页面后会暂停60s,请在这个间隔手动输入邮箱并获取验证码登录。),登录成功后会向claude发送'hello'问候,并提示claude,请用知乎高赞的方式回答下列问题:
## 配置默认信息
options = webdriver.ChromeOptions()
prefs = {'profile.default_content_settings.popups': 0, 'download.default_directory': 'D:\\bing_zhihu\\'}
options.add_experimental_option('prefs', prefs)
ziwu = webdriver.Chrome(options=options)
## 访问claude
ziwu.get("https://claude.ai/chat/1934be9f-3577-4b66-a03a-473d2d36036d")
## 暂停60s以手动输入邮箱验证码登录
time.sleep(60)
## 发送hello问候
ziwu.switch_to.active_element.send_keys('hello')
ziwu.find_element(By.XPATH,"/html/body/main/div/div/fieldset/div[2]/div").click()
time.sleep(5)
## 提问使用知乎高赞的方式回答
question = '请用知乎高赞的方式回答下列问题,请直接输出回答,不要输入任何与回答无关的话'
ziwu.switch_to.active_element.send_keys(str(question))
ziwu.find_element(By.XPATH,"/html/body/div[5]/div/div[5]/div/fieldset/div[2]/button").click()
time.sleep(60)
## 获取回复内容
page_text = ziwu.page_source
ques_list = re.findall(r'<div class="contents"><p class="whitespace-pre-wrap">(.*?)</p></div>',page_text)
answer = ques_list[-1]
ziwu.refresh()
time.sleep(5)`
第二部分,准备好claude自动回答函数,即函数输入内容为需要回答的问题,输出部分为回答的结果
def ask_and_answer(question):`
ziwu.refresh()
time.sleep(5)
## 输入问题
question = str(question)
ziwu.switch_to.active_element.send_keys(str(question))
ziwu.find_element(By.XPATH,"/html/body/div[3]/div/div[5]/div/fieldset/div[2]/button").click()
time.sleep(120)
## 获取回答内容
page_text = ziwu.page_source
ques_list = re.findall(r'<div class="contents"><p class="whitespace-pre-wrap">(.*?)</p></div>',page_text,re.S)
answer = re.sub('<(.*?)>','',ques_list[-1]).replace('\n','')
print(str(answer))
ziwu.refresh()
time.sleep(5)
return answer
``` ##
第三部分,爬取知乎提问的内容,输入到之前写好的函数,获取回答并输入到知乎回答栏发表
options = webdriver.ChromeOptions()
prefs = {'profile.default_content_settings.popups': 0, 'download.default_directory': 'D:\\bing_zhihu\\'}
options.add_experimental_option('prefs', prefs)
zhihu = webdriver.Chrome(options=options)
## 登录问题推荐栏
zhihu.get('https://www.zhihu.com/creator/featured-question/recommend')
## 请扫码登录
sleep(15)
## 登陆后进入问题推荐栏目
zhihu.get('https://www.zhihu.com/creator/featured-question/recommend')
sleep(20)
## 获取提问的问题以及问题链接
page_textzhi = zhihu.page_source
ques_listzhi = re.findall(r'<div class="css-1rs9lm3"><a class="css-1s2rixt" href="(.*?) target=',page_textzhi)
req_listzhi = re.findall(r'" target="_blank">(.*?)</a><div class="css',page_textzhi)
## 逐个将问题输入claude,并获取回答放到知乎回答栏目
link_list = []
for link in ques_listzhi:
link = link.split(' ')[0].replace('?','/').replace('"','')
link_list.append(link)
for num in range(0,len(link_list)-1):
# 输入提问
answerzhihu = ask_and_answer(req_listzhi[num].split('</div>')[-1])
# 访问回答问题栏
zhihu.get(link_list[num])
sleep(10)
# 点击回答按钮 zhihu.find_element(By.XPATH,"/html/body/div[1]/div/main/div/div/div[1]/div[2]/div/div[2]/div/div/div[1]/a/button").click()
sleep(2)
# 输入回答 zhihu.switch_to.active_element.send_keys(answerzhihu.replace('\n','').replace("'",''))
sleep(2)
## 点击发布按钮
zhihu.find_element(By.XPATH,"/html/body/div[1]/div/main/div/div/div[2]/div/div/div/div[2]/div/div[1]/div/button[2]").click()
sleep(5)
全部代码
# -*- coding: utf-8 -*-
import os
from selenium import webdriver
import time
from selenium.webdriver.common.by import By
import datetime
from dateutil.relativedelta import relativedelta
from lxml import etree
# # import pymysql
# import xlwt
import re
from time import sleep
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.select import Select
## 登陆部分,并发送hello
options = webdriver.ChromeOptions()
prefs = {'profile.default_content_settings.popups': 0, 'download.default_directory': 'D:\\bing_zhihu\\'}
options.add_experimental_option('prefs', prefs)
ziwu = webdriver.Chrome(options=options)
# try:
ziwu.get("https://claude.ai/chat/1934be9f-3577-4b66-a03a-473d2d36036d")
time.sleep(60)
ziwu.switch_to.active_element.send_keys('hello')
# ziwu.find_element(By.CLASS_NAME,"flex items-center flex-grow overflow-x-hidden").send_keys("hello word")
# ziwu.find_element(By.NAME,"username").send_keys("airglow2")
# ziwu.find_element(By.NAME,"password").send_keys("123456")
ziwu.find_element(By.XPATH,"/html/body/main/div/div/fieldset/div[2]/div").click()
time.sleep(5)
question = '请用知乎高赞的方式回答下列问题,请直接输出回答,不要输入任何与回答无关的话'
ziwu.switch_to.active_element.send_keys(str(question))
ziwu.find_element(By.XPATH,"/html/body/div[5]/div/div[5]/div/fieldset/div[2]/button").click()
time.sleep(60)
page_text = ziwu.page_source
ques_list = re.findall(r'<div class="contents"><p class="whitespace-pre-wrap">(.*?)</p></div>',page_text)
answer = ques_list[-1]
# print(str(answer))
ziwu.refresh()
time.sleep(5)
## 发送需要对话的内容,并获取回答
def ask_and_answer(question):
ziwu.refresh()
time.sleep(5)
question = str(question)
ziwu.switch_to.active_element.send_keys(str(question))
ziwu.find_element(By.XPATH,"/html/body/div[3]/div/div[5]/div/fieldset/div[2]/button").click()
# /html/body/div[3]/div/div[5]/div/fieldset/div[2]/button/svg/path
time.sleep(120)
page_text = ziwu.page_source
ques_list = re.findall(r'<div class="contents"><p class="whitespace-pre-wrap">(.*?)</p></div>',page_text,re.S)
answer = re.sub('<(.*?)>','',ques_list[-1]).replace('\n','')
print(str(answer))
ziwu.refresh()
time.sleep(5)
return answer
options = webdriver.ChromeOptions()
prefs = {'profile.default_content_settings.popups': 0, 'download.default_directory': 'D:\\bing_zhihu\\'}
options.add_experimental_option('prefs', prefs)
zhihu = webdriver.Chrome(options=options)
# driver = webdriver.Edge('D:\conda\Scripts\MicrosoftWebDriver.exe')
zhihu.get('https://www.zhihu.com/creator/featured-question/recommend')
sleep(15)
# def zhizhu():
zhihu.get('https://www.zhihu.com/creator/featured-question/recommend')
sleep(20)
page_textzhi = zhihu.page_source
ques_listzhi = re.findall(r'<div class="css-1rs9lm3"><a class="css-1s2rixt" href="(.*?) target=',page_textzhi)
req_listzhi = re.findall(r'" target="_blank">(.*?)</a><div class="css',page_textzhi)
# '<div class="css-1rs9lm3"><a class="css-1s2rixt" href="(.*?) target='
# '" target="_blank">(.*?)</a><div class="css'
link_list = []
for link in ques_listzhi:
link = link.split(' ')[0].replace('?','/').replace('"','')
link_list.append(link)
for num in range(0,len(link_list)-1):
# ask_and_answer('如何评价放寒假')
answerzhihu = ask_and_answer(req_listzhi[num].split('</div>')[-1])
# answer = 'test'
# driver.switch_to.active_element.send_keys(answer)
zhihu.get(link_list[num])
sleep(10)
# try:
# driver.find_element(By.LINK_TEXT,"发布回答").click()
# sleep(5)
# except:
# print('error')
zhihu.find_element(By.XPATH,"/html/body/div[1]/div/main/div/div/div[1]/div[2]/div/div[2]/div/div/div[1]/a/button").click()
sleep(2)
zhihu.switch_to.active_element.send_keys(answerzhihu.replace('\n','').replace("'",''))
sleep(2)
# driver.find_element(By.LINK_TEXT,"发布回答").click()
# sleep(30)
zhihu.find_element(By.XPATH,"/html/body/div[1]/div/main/div/div/div[2]/div/div/div/div[2]/div/div[1]/div/button[2]").click()
sleep(5)
# ask_and_answer