Html 如何知道Perl Mojo::DOM::find是否返回或匹配任何DOM元素

Html 如何知道Perl Mojo::DOM::find是否返回或匹配任何DOM元素,html,perl,dom,mojolicious,Html,Perl,Dom,Mojolicious,我目前正在用解析一系列的网页,我要继续往下分析网页的唯一标准是是否在其中找到了元素 我的DOM对象是这样构建的: my $urlMJ = Mojo::URL->new($entry->link); my $tx = $ua->get($urlMJ); my $base = $tx->req->url; my $dom = $tx->res->dom; my $divVideo = $dom->find('div#searchforme'); 我的

我目前正在用解析一系列的网页,我要继续往下分析网页的唯一标准是是否在其中找到了元素

我的DOM对象是这样构建的:

my $urlMJ = Mojo::URL->new($entry->link);
my $tx = $ua->get($urlMJ);
my $base = $tx->req->url;
my $dom = $tx->res->dom;
my $divVideo = $dom->find('div#searchforme');
我的问题是,如何知道
$divVideo
是否为空

我意识到,从SRI(Riedel)回答的这个问题来看,如果
find
与任何元素都不匹配,它将返回(如果我正确获得)启动
find
的DOM对象集合和一个空DOM集合,这恰好是结果

我曾想过使用
each
访问其中的空DOM集合,但返回的DOM不包含初始DOM结构吗

我尝试过使用
if(defined($divVideo))
,也尝试过使用
打印转储程序($divVideo)
转储。它返回的是
$VAR1=bless([],'Mojo::Collection')

我尝试了
$dom->find('div#searchforme')->size
,返回值为
0
,甚至对于不属于此类别的网页也是如此

谁能帮帮我吗

我的方法错了吗

如果find与任何元素都不匹配,它将返回(如果我正确获得它的话)启动find的DOM对象集合和一个空的DOM集合,这恰好是结果

你误解了
查找
。它只返回一组表示页面中每个匹配元素的
Mojo::DOM
对象。没有别的了。因此,如果没有找到匹配项,则只返回一个空集合

这个对象有一个
size
方法,所以你可以说

my $divColln = $dom->find('div#searchforme');

if ( $divColln->size > 0 ) {
    ...
}
或者,您可以使用
each
方法将集合转换为列表,并将其分配给如下数组

my @divColln = $dom->find('div#searchforme')->each;

if ( @divColln ) {
    ...
}
my $divVideo = $dom->find('div#searchforme')->[0];

if ( $divVideo ) {
    ...
}
或者,如果您希望只找到一个这样的元素(看起来您正在这样做),那么您可以从集合中选择第一项,如下所示

my @divColln = $dom->find('div#searchforme')->each;

if ( @divColln ) {
    ...
}
my $divVideo = $dom->find('div#searchforme')->[0];

if ( $divVideo ) {
    ...
}

感谢@Borodin的快速响应。我打印了一个
$divVideo->size
,但它都返回了一个
0
值,即使是所有包含元素的网页,那么要么是选择器错误,要么是HTML错误
div#searchforme
查找类似
的元素。您是否打算使用
div.searchforme
?也可能部分页面是使用JavaScript构建的,而
Mojo::UserAgent
不支持这一点。尝试打印
$dom->to_string
以查看HTML是否是您认为正确的@Borodin,页面部分是用javascript构建的,当Mojo::UserAgent获取页面时,这些元素尚未写入。那么我将使用另一种方法。实际上是一个部门id。非常感谢你。