489 字
1 分钟
基于 Selenium + Chromedriver 的智慧树自动评论
2026-06-05

智慧树一些需要刷评论的课的评论页面禁止了复制粘贴,这就很难受。不过他只防君子防不了小人,基于 Selenium + Chromedriver 仍然可以成功的发送评论,而且可以批量刷评。

环境要求#

代码实现#

初始化#

建议 jupyter notebook,方便调试

先用 chromedriver 开出来一个浏览器

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.service import Service
options = webdriver.ChromeOptions()
options.binary_location = "/Applications/Google Chrome for Testing.app/Contents/MacOS/Google Chrome for Testing" # 换成自己的路径
service = Service("/usr/local/bin/chromedriver") # 换成自己的路径
driver = webdriver.Chrome(service=service, options=options)
base_url = "https://qah5.zhihuishu.com/qa.html#/web/home/1000008017?role=2&recruitId=415085&VNK=19fcdabc" # 改成需要打开的 url 课程的问答页 / 问答的详情页
driver.get(base_url)

这里人工登录一下(自动登录也是可以的,但是工作量会翻好几倍)。

评论下面刷评论#

本来以为这样就能刷满的,因为这样最简单,然后先这么弄了,后来发现一分都没有😭

后续的两种都是有用的

以评论评论为例,稍微详细的描述一下流程,发帖和回答都是类似的逻辑,点开一个评论准备评论

comment

获取一下 textarea 和“发表“按钮的元素,然后一直重复 textarea.send_keys(评论), 发表按钮.click() 即可。

注意不能发的太快,否则会被禁言,像这样。

muted

# https://qah5.zhihuishu.com/qa.html#/web/questionDetail/1000008017/3112667604?recruitId=415085&role=2&VNK=401a52f3
import random
import time
comments = [
"学习创业基础课可以帮助我们了解创业的基本流程,培养创新意识和机会识别能力。",
"创业基础课的意义在于让我们明白创业不是简单开公司,而是发现问题、整合资源并创造价值。",
"通过这门课,我们可以提升团队合作、沟通表达和解决实际问题的能力。",
"创业基础课能拓宽我们的就业和发展思路,让我们不只局限于传统就业路径。",
"学习创业基础课有助于培养风险意识,让我们在面对不确定性时更加理性和谨慎。",
"这门课让我们认识到创业需要市场分析、商业模式设计和资源整合等综合能力。",
"创业基础课可以激发大学生的创新精神,提高我们把想法转化为实际项目的能力。",
"通过学习创业基础课,我们能更好地理解社会需求,并尝试用创新方式解决现实问题。",
"创业基础课不仅教创业知识,也培养我们的责任意识、实践能力和抗挫折能力。",
"学习这门课有助于我们形成创业思维,即使将来不创业,也能在工作中更主动地发现机会。",
]
for comment in comments:
ta = driver.find_element(
By.XPATH,
'//*[@id="app"]/div/div[3]/div[1]/div[2]/ul/li[1]/div[4]/div[2]/textarea'
)
ta.send_keys(comment)
driver.find_element(By.CSS_SELECTOR, "div.issue-btn").click()
print(f"Posted comment: {comment}")
time.sleep(random.randint(5, 10))

输出:

Posted comment: 学习创业基础课可以帮助我们了解创业的基本流程,培养创新意识和机会识别能力。
Posted comment: 创业基础课的意义在于让我们明白创业不是简单开公司,而是发现问题、整合资源并创造价值。
Posted comment: 通过这门课,我们可以提升团队合作、沟通表达和解决实际问题的能力。
Posted comment: 创业基础课能拓宽我们的就业和发展思路,让我们不只局限于传统就业路径。
Posted comment: 学习创业基础课有助于培养风险意识,让我们在面对不确定性时更加理性和谨慎。
Posted comment: 这门课让我们认识到创业需要市场分析、商业模式设计和资源整合等综合能力。
Posted comment: 创业基础课可以激发大学生的创新精神,提高我们把想法转化为实际项目的能力。
Posted comment: 通过学习创业基础课,我们能更好地理解社会需求,并尝试用创新方式解决现实问题。
Posted comment: 创业基础课不仅教创业知识,也培养我们的责任意识、实践能力和抗挫折能力。
Posted comment: 学习这门课有助于我们形成创业思维,即使将来不创业,也能在工作中更主动地发现机会。

刷提问#

直接拿上一个改的可以参考一下,这个是在问答首页一直发提问

# base_url = "https://qah5.zhihuishu.com/qa.html#/web/home/1000008017?recruitId=415085&role=2&VNK=21374155"
import random
import time
comments = [
"学习创业基础课程后,你觉得大学生创业最重要的能力是什么?",
"你认为创业过程中团队合作的重要性体现在哪些方面?",
"创业基础课程中哪个案例最让你印象深刻?",
"你觉得创新思维在创业过程中有多重要?",
"通过这门课程,你对创业风险有了哪些新的认识?",
"你认为大学生创业最大的优势是什么?",
"创业基础课程是否提升了你对未来职业规划的思考?",
"你觉得创业者最需要具备哪些品质?",
"学习创业基础后,你是否更愿意尝试自主创业?",
"你认为创业初期最困难的问题通常是什么?",
"课程中提到的商业模式对创业成功有多大影响?",
"你觉得市场调研在创业中的作用重要吗?",
"通过学习这门课,你最大的收获是什么?",
"你认为创业教育对大学生的发展有哪些帮助?",
"你觉得创业过程中坚持和执行力哪个更重要?",
"创业基础课程是否改变了你对创业的看法?",
"你认为互联网时代给创业带来了哪些机会?",
"你觉得创业失败后最重要的事情是什么?",
"课程中的创业案例对现实生活有参考价值吗?",
"你认为创业成功最关键的因素是什么?"
]
for comment in comments:
driver.find_element(By.XPATH, '//*[@id="app"]/div/div[2]/div[1]/div/div[3]').click()
time.sleep(1)
driver.find_element(By.XPATH, '//*[@id="app"]/div/div[2]/div[1]/div/div[4]/div/div/div[2]/div[1]/div[1]/div/textarea').send_keys(comment)
driver.find_element(By.CSS_SELECTOR, "div.up-btn").click()
print(f"Posted comment: {comment}")
time.sleep(random.randint(5, 10))

输出:

Posted comment: 学习创业基础课程后,你觉得大学生创业最重要的能力是什么?
Posted comment: 你认为创业过程中团队合作的重要性体现在哪些方面?
Posted comment: 创业基础课程中哪个案例最让你印象深刻?
Posted comment: 你觉得创新思维在创业过程中有多重要?
Posted comment: 通过这门课程,你对创业风险有了哪些新的认识?
Posted comment: 你认为大学生创业最大的优势是什么?
Posted comment: 创业基础课程是否提升了你对未来职业规划的思考?
Posted comment: 你觉得创业者最需要具备哪些品质?
Posted comment: 学习创业基础后,你是否更愿意尝试自主创业?
Posted comment: 你认为创业初期最困难的问题通常是什么?
Posted comment: 课程中提到的商业模式对创业成功有多大影响?
Posted comment: 你觉得市场调研在创业中的作用重要吗?
Posted comment: 通过学习这门课,你最大的收获是什么?
Posted comment: 你认为创业教育对大学生的发展有哪些帮助?
Posted comment: 你觉得创业过程中坚持和执行力哪个更重要?
Posted comment: 创业基础课程是否改变了你对创业的看法?
Posted comment: 你认为互联网时代给创业带来了哪些机会?
Posted comment: 你觉得创业失败后最重要的事情是什么?
Posted comment: 课程中的创业案例对现实生活有参考价值吗?
Posted comment: 你认为创业成功最关键的因素是什么?

效果图

ques

刷回答#

用的是问答页的 base_url 因为要从这里爬问题并依次点进去刷回答。这个需要频繁的切网页,每次都实时生成一个比较合理一点,如果不在意回答的内容自然也可以和之前一样随便输出。如果用 LLM 的 api 生成的话需要配置 api_key,我这里用了白嫖的 gemini(openai 接口的或者其他接口的都可行,改一下对应的 client 和用法就行)。

# base_url = "https://qah5.zhihuishu.com/qa.html#/web/home/1000008017?role=2&recruitId=415085&VNK=19fcdabc"
import time
from google import genai
genai_client = genai.Client()
driver.switch_to.window(driver.window_handles[0])
questions = driver.find_elements(By.CSS_SELECTOR, "li.question-item") # 找到所有提问,我这里事先验证过只有 50 个,如果太多可以取前几个
for q in questions:
q.find_element(By.CSS_SELECTOR, "div.question-content.ZHIHUISHU_QZMD").click()
driver.switch_to.window(driver.window_handles[-1]) # 他会弹一个新的 tab,我们需要切过去
time.sleep(2)
question_content = driver.find_element(By.CSS_SELECTOR, "div.question-content").text
try:
driver.find_element(By.CSS_SELECTOR, "div.my-answer-btn").click()
except Exception as e:
# 这里是为了防止已经回答过不能回答导致报错,这样的话就直接跳过
print(f"Error clicking answer button")
driver.close()
driver.switch_to.window(driver.window_handles[0])
continue
ans = genai_client.models.generate_content(
model="gemini-3.1-flash-lite",
contents=f"你是一个大二学生。请根据以下问题内容,给出一个简略的的回答,回答要有条理,清晰易懂。不能使用 markdown 语法,全部压缩到一段内。\n\n问题内容:{question_content}"
)
driver.find_element(By.CSS_SELECTOR, "textarea.el-textarea__inner").send_keys(ans.text)
driver.find_element(By.CSS_SELECTOR, "div.up-btn.ZHIHUISHU_QZMD.set-btn").click()
driver.close() # 用完了关掉
driver.switch_to.window(driver.window_handles[0]) # 然后切回去

效果图

ans

当然也不能太快,比如这样

ans_err

退出#

然后优雅退出。

driver.quit()
分享

如果这篇文章对你有帮助,欢迎分享给更多人!

基于 Selenium + Chromedriver 的智慧树自动评论
https://starlab.top/posts/zhs-auto-comment/
作者
Star
发布于
2026-06-05
许可协议
CC BY-NC-SA 4.0

部分信息可能已经过时

目录