#!/usr/bin/env perl use strict; use warnings; use WWW::Mechanize::Firefox; use HTML::TableExtract; # Firefox will be in a different place/name for different architectures. my $mech = WWW::Mechanize::Firefox->new( activate => 1, autoclose => 1, launch => "/Applications/Firefox.app/Contents/MacOS/firefox" ); $mech->get("https://webapp4.asu.edu/catalog/Home.ext"); eval { my ( $val,$type ) = $mech->eval_in_page(<<'JS'); jQuery(function($){ // Click the ASU campus+online radio button. $("input[name='typeSelection'][value='C']").click(); }); JS }; die $@ if $@; # Get the desired search result page. $mech->get("https://webapp4.asu.edu/catalog/course?s=MAT&n=243&c=DTPHX&t=2144&f=INTRT&r=44843"); my @headers = ( qr/ Reserved \s+ Available \s+ Seats /x, qr / Students \s+ Enrolled /x, qr/ Total \s+ Seats \s+ Reserved /x, qr/ Reserved \s+ Until /x, ); my $te = HTML::TableExtract->new( headers => \@headers ); $te->parse($mech->content); for my $row ( $te->rows ) { no warnings "uninitialized"; s/\A\s+//g, s/\s+\z//g, s/\s/ /g for @$row; next unless grep length, @$row; print "Scraped info: ", join(',', @$row), "\n"; }