1. Introduction


For the better part of a decade, Python developers lived in a golden age of web automation. If you could inspect a network request in Chrome DevTools, copy the headers, and replicate them in a requests.get() call, you could scrape the data. If you hit a rate limit, you rotated your IP address. If you hit a user-agent block, you...