图片来源
489 字
1 分钟
基于 Selenium + Chromedriver 的智慧树自动评论
智慧树一些需要刷评论的课的评论页面禁止了复制粘贴,这就很难受。不过他只防君子防不了小人,基于 Selenium + Chromedriver 仍然可以成功的发送评论,而且可以批量刷评。
环境要求
- 版本一致的 Chromdriver 和 Chrome: https://googlechromelabs.github.io/chrome-for-testing/
- Python 包 selenium
# 如果是 python 可以pip install selenium# 如果是 conda 可以conda install selenium
代码实现
初始化
建议 jupyter notebook,方便调试
先用 chromedriver 开出来一个浏览器
from selenium import webdriverfrom selenium.webdriver.common.by import Byfrom 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)这里人工登录一下(自动登录也是可以的,但是工作量会翻好几倍)。
评论下面刷评论
本来以为这样就能刷满的,因为这样最简单,然后先这么弄了,后来发现一分都没有😭
后续的两种都是有用的
以评论评论为例,稍微详细的描述一下流程,发帖和回答都是类似的逻辑,点开一个评论准备评论

获取一下 textarea 和“发表“按钮的元素,然后一直重复 textarea.send_keys(评论), 发表按钮.click() 即可。
注意不能发的太快,否则会被禁言,像这样。
# https://qah5.zhihuishu.com/qa.html#/web/questionDetail/1000008017/3112667604?recruitId=415085&role=2&VNK=401a52f3import randomimport 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 randomimport 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: 你认为创业成功最关键的因素是什么?效果图

刷回答
用的是问答页的 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 timefrom 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]) # 然后切回去效果图

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

退出
然后优雅退出。
driver.quit() 分享
如果这篇文章对你有帮助,欢迎分享给更多人!
基于 Selenium + Chromedriver 的智慧树自动评论
https://starlab.top/posts/zhs-auto-comment/ 部分信息可能已经过时
相关文章 智能推荐

