$agent->field('note_doctext'); #### $agent->field('note_doctext',$textarea); #### use strict; use warnings; use XML::XPath; use XML::LibXML; use WWW::Mechanize; use HTTP::Cookies; use Data::Dumper; use constant URL => 'http://www.perlmonks.org'; my $user_name = ; my $user_id = ; my $password = ; my $search = 'onestary'; my $replace = 'onastery'; my $agent = login($user_name,$password); my $raw_results = raw_search_results($agent,$user_name,$search); my @link = get_links($raw_results); replace($agent,$_,$search,$replace) for @link; sub replace { my ($agent,$link,$search,$replace) = @_; $agent->get(URL . $link); print STDERR "got $link ..."; my $textarea = get_textarea($agent->{content}); warn "no textarea for $link" and return unless $textarea; $textarea =~ s/$search/$replace/g; $agent->form(2); $agent->field('note_doctext',$textarea); $agent->click('sexisgood'); print STDERR "done!\n"; } sub get_textarea { my $html = shift; my $dom = get_dom($html); my @node = $dom->findvalue(q|//textarea[@name='note_doctext']|); return $node[0]; } sub get_links { my $html = shift; my $dom = get_dom($html); my @link; for ($dom->findnodes(q|//table[@width='100%']/tr/td/a|)) { my $href = $_->getAttribute('href'); next unless $href; my ($id) = $href =~ /(\d+)$/; $id ||= 0; push @link, $href if $id > $user_id; } return @link; } sub get_dom { XML::LibXML->new->parse_html_string(shift) } sub raw_search_results { my ($agent,$author,$text) = @_; # Super Search is node 3989 $agent->get(URL . '/index.pl?node_id=3989'); $agent->form(2); $agent->field(@$_) for ( ['BIT', $text], # search text [qw(xa 0 1)], # include ... ['a', $author], # author ); $agent->click('go'); print STDERR "got search results ...\n"; return $agent->{content}; } sub login { my ($user,$pass) = @_; my $agent = WWW::Mechanize->new(); $agent->cookie_jar(HTTP::Cookies->new()); # Reviews is a fast loading page to login with $agent->get(URL . '/index.pl?node_id=21144'); $agent->form(2); $agent->field(@$_) for ( [qw(op login)], ['user', $user], ['passwd',$pass], ); $agent->click('login'); print STDERR "logged in ...\n"; return $agent; }