You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为Cookie Clicker脚本实现5分钟周期内的5秒定时检测?

我正在编写Angela Yu《100天代码》中的Cookie Clicker游戏自动化脚本,目标是在5分钟内尽可能多地点击Cookie,同时每5秒检查累积分数,购买最高可用的升级。觉得官方解决方案过于冗长复杂,自己开发时卡在嵌套逻辑实现:让主循环运行5分钟,同时每5秒执行一次检测与购买操作。以下是我的代码:

import threading
import time
from collections import defaultdict

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from threading import Thread
from time import sleep
from datetime import datetime, timedelta

chrome_options = webdriver.ChromeOptions()
chrome_options.add_experimental_option("detach", True)

driver = webdriver.Chrome(options=chrome_options)
driver.get("https://orteil.dashnet.org/experiments/cookie/")
driver.maximize_window()

#######################ELEMENTS & CONVERTING TO LISTS\DICT#######################
cookie = driver.find_element(By.CSS_SELECTOR, '#cookie')
score = driver.find_element(By.CSS_SELECTOR, '#money')
scoreNum = int(score.text)
all_prices = driver.find_elements(By.CSS_SELECTOR, '#store b')
all_ids = driver.find_elements(By.CSS_SELECTOR, '#store div')
new_all_prices = []
new_all_ids = []
for new_id in all_ids:
    new_all_ids.append(new_id.get_attribute("id"))
for price in all_prices:
    a, b, c = price.text.partition('-')
    new_price = c.replace(" ", "")
    if c == "":
        pass
    else:
        new_all_prices.append(c.replace(" ", ""))

tuples = [(key, value)
          for i, (key, value) in enumerate(zip(new_all_prices, new_all_ids))]

myDict = dict(tuples)

#######################FUNCTIONS#######################


def five_seconds_check():
    for key, value in myDict.items():
        if scoreNum >= key:
            my_clickable_purchase = driver.find_element(By.CSS_SELECTOR, f'{myDict[key]}')
            my_clickable_purchase.click()


timeout = time.time() + 5
five_min = time.time() + 60 * 5  # 5 minutes

while True:
    cookie.click()
    if time.time() > timeout:
        five_seconds_check()
    elif time.time() > five_min:
        break

#########################CLOSING BROWSER#########################
time.sleep(5)
driver.close()

问题分析

  1. 分数未实时更新:scoreNum仅在脚本启动时获取一次,后续不会同步页面实时分数,导致购买判断完全失效。
  2. 5秒检查仅执行一次:timeout变量未在每次检查后重置,只会触发一次购买逻辑。
  3. 购买逻辑错误:遍历升级时未优先选择最贵的可用升级,且CSS选择器格式错误(需用#元素ID格式)。
  4. 循环条件顺序错误:先检查5秒间隔再检查5分钟时限,可能导致脚本无法及时终止。

修正后的代码

import time
from selenium import webdriver
from selenium.webdriver.common.by import By

chrome_options = webdriver.ChromeOptions()
chrome_options.add_experimental_option("detach", True)

driver = webdriver.Chrome(options=chrome_options)
driver.get("https://orteil.dashnet.org/experiments/cookie/")
driver.maximize_window()

# 初始化元素
cookie = driver.find_element(By.CSS_SELECTOR, '#cookie')
store = driver.find_element(By.ID, 'store')

# 解析升级项:价格(整数): 元素ID
upgrades = {}
for item in store.find_elements(By.TAG_NAME, 'div'):
    item_text = item.find_element(By.TAG_NAME, 'b').text
    if not item_text:
        continue
    # 分割名称和价格,处理带逗号的价格(如1,000)
    _, price_str = item_text.split('-')
    price = int(price_str.strip().replace(',', ''))
    upgrades[price] = item.get_attribute('id')

# 时间设置
end_time = time.time() + 60 * 5  # 5分钟后结束
next_check_time = time.time() + 5  # 首次检查时间

while time.time() < end_time:
    # 持续点击Cookie
    cookie.click()
    
    # 每5秒执行一次购买检查
    if time.time() >= next_check_time:
        # 获取当前实时分数,处理带逗号的情况
        current_score = int(driver.find_element(By.ID, 'money').text.replace(',', ''))
        
        # 筛选所有可购买的升级,按价格从高到低排序
        affordable_upgrades = [price for price in upgrades if price <= current_score]
        if affordable_upgrades:
            highest_price = max(affordable_upgrades)
            # 点击最贵的可购买升级
            driver.find_element(By.ID, upgrades[highest_price]).click()
        
        # 重置下一次检查时间
        next_check_time = time.time() + 5

# 结束后获取最终饼干每秒产量
cps = driver.find_element(By.ID, 'cps').text
print(f"5分钟结束,最终每秒产量:{cps}")

driver.quit()

关键优化点

  • 实时获取页面分数,处理带逗号的大数字格式
  • 每次检查后重置5秒计时器,确保循环执行
  • 优先购买最贵的可用升级,最大化收益效率
  • 简化升级项解析逻辑,避免无效元素干扰
  • 调整循环条件,确保脚本准时终止

内容的提问来源于stack exchange,提问作者DoesNotMatter

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 22:32:09