http://qs321.pair.com?node_id=293174


in reply to Javascript in Perl and retrieving the HTML source.

The HTTP server is giving you the raw page before Javascript is processed. This is because the web browser has to process it. If you changed your web browser settings to turn off Javascript, you would have the same problem as you are having with the Perl program.

What you need to do is process the Javascript commands in your Perl program, just like the web browser does. Check out Javascript for a Perl module that does that.

  • Comment on Re: Javascript in Perl and retrieving the HTML source.

Replies are listed 'Best First'.
Re: Re: Javascript in Perl and retrieving the HTML source.
by waiterm (Acolyte) on Sep 23, 2003 at 14:05 UTC
    I'm having real trouble setting up the Javascript module on my computer, and am not really getting anywhere at all. Could you point me in the right direction with this one as I'm still fairly new to perl. Thanks!

      I have not used the Javascript module before, so I am not sure how it works. Check out jeffa's reply at 293164. I agree with jeffa that the table is not being generated with Javascript, so I don't see why you can't just download the page and parse the HTML. The only Javascript code on that page is only there to manipulate the images on the page, and I am not even sure that it does anything at all (it looks like MacroMedia Dreamweaver puts MM_ functions into everything it makes.)

        I've managed to fix the problem with the following code:
        sub get { $date_ = $mm." ".$year; my $SendObject=Win32::OLE->new('microsoft.XMLhttp'); $SendObject->open("GET", "http://212.53.74.34/pages6068/availabili +ty2.cfm?propref=".$RRETid."&date_month=".$mon."&date_year=".$year."", + "false"); $SendObject->setRequestHeader("Content-type", "text/plain"); $SendObject->send(); my $response_ = $SendObject->responseText; $response_ =~ s/\s/ /g; @dat = split(/$date_/,$response_); $response_ = $dat[1]; @dat = split(/<\/Table>/i,$response_); $response_ = $dat[0]; open(LOG,">C:/tmp/RRET/RREThtml.txt"); print LOG $response_; close + LOG; }
        however, I can't now call $response_ in the main program... do I have to set it as a global variable...if so, how??