Want to protect your cyber security and still get fast solutions? Ask a secure question today.Go Premium

  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 841
  • Last Modified:

WWW::Mechanize tutorial

I am new to pearl and I would like to learn about WWW::Mechanize,
can someone share me some good links or books with many examples?

Note: I didn't find many examples on http://search.cpan.org
  • 5
  • 2
1 Solution
nemws1Database AdministratorCommented:
There are several examples here:


I've written many scripts using WWW::Mechanize - I'll go through them and find a few examples that I can share and post them here.
nemws1Database AdministratorCommented:
I use the Mac Dashboard applet from Junecloud called 'Delivery Status' to track shipments, but I'm often not at a Mac when I get the e-mail, so I whipped up this script using WWW::Mechanize to add a package to my tracking list.


  addpkg.pl --from DeliveryCompany --item "Cool New Thing" --no 123456789012345

The most important thing is usually to create the HTTP::Cookies object, as many websites use cookies for tracking.
pravink22Author Commented:
Urs doc is not accessible, can you reattach once again?
Independent Software Vendors: We Want Your Opinion

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

nemws1Database AdministratorCommented:
Sure thing. ;-)
pravink22Author Commented:
When I tried to download, I am getting the following error msg:

You don't have permission to access /incoming/2011/09_w39/501050-addpkg.pl.txt on this server.

Can you copy paste it?
nemws1Database AdministratorCommented:
Hmmm... that still comes up as forbidden.  Let me just paste it.
# Track a package using Junecloud
# File: addpkg.pl
# Author: Nem W Schlecht
#   Copyright © 2009
#   License: Creative Commons Attribution-Share Alike
# Creation Date: Apr 06, 2009

use WWW::Mechanize;
use HTTP::Cookies;
use Getopt::Long;

my $from;
my $name;
my $track;

my $res = GetOptions("from=s" => \$from,
                     "item=s" => \$name,
                     "no=s" => \$track);

if (length($from) < 2 || length($name) < 2 || length($track) < 2) {
    print "Usage: $0 --from <shipco> -item <itemname> -no <tracknum>\n";
    print "\tShipping companies:\n";
    while (<DATA>) {
        next unless /\.com$/;
        print "\t$_\n";

my $url = "https://junecloud.com/ds/";
my $m = new WWW::Mechanize;


                form_number => '1',
                fields => {
                    email => 'myemail@mydomain.com',
                    password => 'S3cr3tPaSsw0rD',
                    remember => '30'

my $from_host;
while (<DATA>) {
    next unless /\.com$/;
    if (/$from/) {
        $from_host = $_;

                form_number => '1',
                fields => {
                    cmd => 'add',
                    type => 'web',
                    from => $from_host,
                    name => $name,
                    no => $track

<option value="www.adobe.com">Adobe (US and Canada)</option>
<option value="www.amazon.com">Amazon.com</option>
<option value="www.amazon.ca">Amazon.ca</option>
<option value="www.amazon.co.uk">Amazon.co.uk</option>
<option value="www.amazon.co.jp">Amazon.co.jp</option>
<option value="www.amazon.de">Amazon.de</option>
<option value="www.amazon.at">Amazon.at</option>
<option value="www.amazon.fr">Amazon.fr</option>
<option value="www.amazon.it">Amazon.it (coming soon)</option>
<option value="www.apple.com">Apple - by email address</option>
<option value="www.apple.com/zip">Apple - by zip code</option>
<option value="www.apple.com/japan">Apple - Japan, by email address</option>
<option value="www.apple.com/japanzip">Apple - Japan, by zip code</option>
<option value="www.apple.com/hk">Apple - Hong Kong</option>
<option value="www.aramex.com">Aramex</option>
<option value="em.canadapost.ca">Canada Post</option>
<option value="www.city-link.co.uk">City Link</option>
<option value="track.dhl-usa.com">DHL - Express</option>
<option value="www.dhlglobalmail.com">DHL - GlobalMail</option>
<option value="nolp.dhl.de">DHL - Germany</option>
<option value="www.dpd.com">DPD - Germany</option>
<option value="www.fedex.com">FedEx</option>
<option value="www.gls-germany.com">GLS</option>
<option value="checkout.google.com">Google Checkout</option>
<option value="www.hlg.de">Hermes Logistik Gruppe - Germany</option>
<option value="www.hongkongpost.com">Hongkong Post</option>
<option value="www.japanpost.jp/ems">Japan Post - EMS</option>
<option value="www.japanpost.jp/m10">Japan Post - Morning 10 Overnight Mail</option>
<option value="www.japanpost.jp/reg">Japan Post - Registered Mail</option>
<option value="www.japanpost.jp/yupack">Japan Post - Yu-Pack</option>
<option value="www.laposte.fr">La Poste (coming soon)</option>
<option value="www.ontrac.com">OnTrac</option>
<option value="www.parcelforce.com">Parcelforce</option>
<option value="www.postdanmark.dk">Post Danmark</option>
<option value="www.poste.it/posta1">Poste Italiane - Postacelere1 Plus</option>
<option value="www.poste.it/pacco1">Poste Italiane - Paccocelere1 Plus</option>
<option value="www.poste.it/maxi">Poste Italiane - Paccocelere Maxi</option>
<option value="www.poste.it">Poste Italiane - Paccocelere3</option>
<option value="www.poste.it/pacco">Poste Italiane - Paccocelere Internationale</option>
<option value="www.poste.it/ems">Poste Italiane - EMS</option>
<option value="www.posten.no">Posten - Norway</option>
<option value="www.posten.se">Posten - Sweden</option>
<option value="www.purolator.com">Purolator</option>
<option value="www.royalmail.com">Royal Mail</option>
<option value="www.sagawa-exp.co.jp">Sagawa Express</option>
<option value="www.post.ch">Swiss Post</option>
<option value="www.tnt.com">TNT - by consignment number</option>
<option value="www.tnt.com/ref">TNT - by reference number</option>
<option value="www.tntpost.nl">TNT Post - Netherlands</option>
<option value="www.ups.com">UPS</option>
<option value="www.ups-mi.net">UPS Mail Innovations</option>
<option value="www.usps.com">US Postal Service</option>
<option value="www.kuronekoyamato.co.jp">Yamato Transport</option>
<option value="other">Other</option>

Open in new window

nemws1Database AdministratorCommented:
To use WWW::Mechanize there are 2 things you should know/do.  First, if you have Firefox with the Web Developer plugin, you can easily trace out FORM names and elements, which you'll need to submit specific forms.  The other thing is to just use trial and error.  I'll often call "print $m->content();" at various stages to make sure I'm getting the desired results.

Featured Post

Hire Technology Freelancers with Gigs

Work with freelancers specializing in everything from database administration to programming, who have proven themselves as experts in their field. Hire the best, collaborate easily, pay securely, and get projects done right.

  • 5
  • 2
Tackle projects and never again get stuck behind a technical roadblock.
Join Now