Here’s one for the so-I’ll-find-it-next-time-I-google files.
Say you’re automating some website interactions with Mechanize.
require "mechanize" agent = Mechanize.new # screen-scrapey stuff...
Say these interactions require a slow login process of fetching a login page, filling in fields, submitting, and waiting for the response.
login_page = agent.get("/login") form = login_page.form_with(action: "/login") form.username = login form.password = password home_page = agent.submit
Say you reeeeeeally don’t want to have to wait for this login process every single time the task runs. With Mechanize, you can save and load the agent’s cookies to a YAML file.
if File.exist?("cookies.yaml") agent.cookie_jar.load("cookies.yaml") else login_page = agent.get("/login") form = login_page.form_with(action: "/login") form.username = login form.password = password home_page = agent.submit end # screen-scrapey stuff agent.cookie_jar.save("cookies.yaml")
(You can save the cookies in other formats too, but that’s beyond the scope of this article).
If you do this, you may be surprised to find that your logged-in session still isn’t preserved. That’s because by default, Mechanize skips session cookies when saving them.
But you can override this behavior with an option:
agent.cookie_jar.save("cookies.yaml", session: true)
With the session
flag set, Mechanize will write out the full contents of its cookie jar for later loading.
home_page = agent.submit
really should behome_page = form.submit