I just tried puppeteer yesterday for the first time. It seems to work very well. My only complaint is that it is very new and does now have a plethora of examples.
I previously have used WWW::Mechanize in the Perl world, but single page applications with Javascript really require something with a browser engine.