| Bytes | Lang | Time | Link |
|---|---|---|---|
| 111 | 251014T095805Z | Shaggy | |
| 129 | 129 bytes | 251014T093824Z | l4m2 |
125 123 121 111 bytes
Saved 2 bytes thanks to emanresu A.
setInterval(_=>{for(e of document.all)e.matches`.can-hold:not(:has(.cost`&!/Slows|restore/.test(e)&&e.click()})
Tested in Chrome only. Reportedly crashes Firefox.
117 115 105 bytes
Should work in theory, assuming an infinite stack. But would need to be run for each new battle.
(f=_=>{for(e of document.all)e.matches`.can-hold:not(:has(.cost`&!/Slows|restore/.test(e)&&e.click(f())})
129 bytes
setInterval(_=>{for(i of document.querySelectorAll(".can-hold:not(:has(.cost))"))/Slows|restore/.test(i.textContent)||i.click()})
Pure golf of the given reference implementation as a beginning
setInterval with no time input click per 4ms IIRC