Парсинг Просто определенный HTML-тег по имени или идентификатору в Perl? - PullRequest
3 голосов
/ 09 июля 2010

Это то, что мне было трудно найти информацию, мне повезло получить ответ на другую вещь, которую я пытался сделать, которая связана с этим (код ниже) .. так что я использую контент $ input (на самом деле это будет полноценная HTML-страница, а не только фрагмент, который я дал ниже), и я хочу просто получить содержимое тега input, который имеет имя или идентификатор "hush_username". Теперь он дает содержимое всех входных тегов ... единственное, что я мог найти в этом упомянутом, что-то вроде включения этого:

$tag->[1]{name} and $tag->[1]{name} eq "hush_username" ;

Но я не смог заставить это работать .. Я был бы очень признателен за любой совет

#!/usr/bin/perl
use strict; use warnings;
use HTML::TokeParser::Simple;
$content = do { local $/; <DATA> };            
my $parser = HTML::TokeParser::Simple->new(\$content);

while ( my $tag = $parser->get_tag('input') ) {
    print $tag->as_is, "\n";
    print "####" ;
    for my $attr ( qw( type name value ) ) {
        printf qq{%s="%s"\n}, $attr, $tag->get_attr($attr);
    }
}
__DATA__
<form name="authenticationform" id="authenticationform"
    action="/authentication/login?skin=mobile&next_webapp_name=hushmail5&amp;next_webapp_url_name=m" method="post">
<input type="hidden" name="next_webapp_page" value=""/>
<p><label for="hush_username">Email address:</label><br/>
<input type="email" name="hush_username" id="hush_username" value="email@test.com"/></p>
<p><label for="hush_passphrase">Passphrase:</label><br/>
<input type="password" name="hush_passphrase" id="hush_passphrase"  maxlength="1000" value=""/></p>
<p><input type="checkbox" name="hush_remember_me" id="hush_remember_me" value="on"
/><label for="hush_remember_me">Stay signed in when I close my browser</label></p>
<p><input type="submit" value="Sign In"/></p>
<input type="hidden" name="hush_customerid" value="0000000000000000"/>
</form>

1 Ответ

4 голосов
/ 09 июля 2010

Будьте проще.Как насчет этого?

while ( my $tag = $parser->get_tag('input') ) {
  my $name = $tag->get_attr('name');
  next unless defined $name and $name eq 'hush_username';
  print "Value: ", $tag->get_attr('value'), "\n";
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...