googlepagination.coffee 1.27 KB
""" Capture multiple pages of google search results

    usage:  casperjs googlepagination.coffee my search terms

    (all arguments will be used as the query)
"""
casper = require('casper').create()

if casper.cli.args.length == 0
  casper.echo "usage: $ casperjs my search terms"
  casper.exit()

casper.start 'http://google.com', ->
  @fill 'form[name=f]',  q: casper.cli.args.join(' '), true
  @click 'input[value="Google Search"]'

casper.then ->
  # google's being all ajaxy, wait for results to load...
  @waitForSelector 'table#nav', ->
    processPage = (cspr) ->
      currentPage = Number cspr.evaluate(-> document.querySelector('table#nav td.cur').innerText), 10
      currentPage = 1 if currentPage == 0
      cspr.capture "google-results-p#{ currentPage }.png"

      # don't go too far down the rabbit hole
      return if currentPage >= 5

      cspr.evaluate ->
        if nextLink = document.querySelector('table#nav td.cur').nextElementSibling?.querySelector('a')
          nextLink.setAttribute "id", "next-page-of-results"

      nextPage = "a#next-page-of-results"
      if cspr.exists nextPage
        cspr.echo "requesting next page..."
        cspr.thenClick(nextPage).then(processPage)
      else
        cspr.echo "that's all, folks."

    processPage(casper)

casper.run()