g | x | w | all
Bytes Lang Time Link
111251014T095805ZShaggy
129129 bytes251014T093824Zl4m2

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