【问题标题】:How to get the value of an html element using HTML::TreeBuilder如何使用 HTML::TreeBuilder 获取 html 元素的值
【发布时间】:2014-03-14 16:18:01
【问题描述】:

我有一个 perl 数组:

Print Dumper(\@jsession);

$VAR1 = [
'<html><body><form name = \'form\' id=\'form\' method = \'POST\' action = \'/Site.jsp\'><input type = hidden name = \'phpSessionID\' value = \'RBOpXs47l6AOw**\'><input type = hidden name = \'LoggedUserName\' value = \'User\'><!--input type = submit name = \'button\' value = \'goAhead\'--></form> <script language = \'JavaScript\'> document.getElementById(\'frmWelcome\').submit();</script></body'</html>
];

我想将 phpSessionID 元素的值放入 perl 变量中。

这是我尝试过的 HTML::TreeBuilder 代码:

$tree=HTML::TreeBuilder->new_from_content(@jsession);
$tree->dump();

它实际上打印了数组中的 HTML 部分,但是我如何使用它来获取我需要的元素的值呢?

这是对我真正有用的代码,以防其他人在哪里搜索:​​

$tree=HTML::TreeBuilder->new_from_content(@jsession);
$first_match = $tree->find_by_attribute('name' => 'phpSessionID');
$first_match->dump();
$value = $first_match->attr('value');
chomp($value);
print "$value";

【问题讨论】:

    标签: perl


    【解决方案1】:

    您使用根元素中的look_down(https://metacpan.org/pod/HTML::Element#look_down)来描述并找到您想要的元素 -

    @elements = $h->look_down( ...criteria... ); 
    $first_match = $h->look_down( ...criteria... ); 
    

    这从$h 开始,并通过它的 元素后代(在预购中),寻找匹配的元素 您指定的标准。在列表上下文中,返回所有匹配的元素 所有给定的标准;在标量上下文中,返回第一个这样的 元素(或 undef,如果没有匹配项)。

    然后在找到的元素上使用 attr (https://metacpan.org/pod/HTML::Element#attr) 来获取属性值。

    $value = $h->attr('attr');
    $old_value = $h->attr('attr', $new_value);
    

    返回(可选地设置)$h 的给定属性的值。这 属性名称(但不是值,如果提供)被强制 小写。如果尝试读取不存在的属性值 这个元素,返回值为undef。如果设置新值,则 返回该属性的旧值。

    【讨论】:

    • 非常感谢您将我推向正确的方向。我也用解决方案更新了我的帖子。
    • 注意:find_by_attribute:“此方法已被弃用,取而代之的是更具表现力的look_down方法,新代码应使用该方法。” - $tree-&gt;look_down( _tag =&gt; 'input', name =&gt; 'phpSessionID')
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-22
    • 1970-01-01
    • 2019-01-23
    • 1970-01-01
    • 2020-06-09
    相关资源
    最近更新 更多