无法使用 Mojo::DOM 定位模块
Can't locate module(s) using Mojo::DOM
我是 Mojolicious 的新手。我确信这可能是一个设置问题,但它已经耗尽了我一整天的时间。我正在尝试 运行 这个简单的测试代码
#!/usr/bin/perl
use strict;
use warnings;
use Mojo::DOM;
use Mojo::UserAgent;
my $ua = Mojo::UserAgent->new();
$ua->get(' div')->ancestors('div.spacer')->each( sub { say $_->all_text } );
我在这个位置找到的
find links containing bold text using WWW::Mechanize
它失败了
Can't locate object method "ancestors" via package "Mojo::Collection" at ./test4.pl line 10.
我已经卸载并重新安装了无数次,尝试了不同的软件包安装选项(cpan、cpanm、直接 link 等)。没有骰子。我有点困惑 Mojo::Collection 模块中似乎没有 "ancestors" 方法(继承或不继承),但我已经看到其他几个类似的例子,它们似乎使用了相同的方法一样的方法。它不仅仅是 "ancestors" 模块——这个问题似乎也影响了其他一些方法。
我在 Linux Mint 上使用 perl 5.18.2 和 Mojolicious 包 6.11。
感谢您的帮助。
像这样调试单个长链语句非常困难,最好将其拆分为单独的步骤
将参数传递给 dom
方法与在 DOM 对象上使用该参数调用 find
相同。 find
returns a Mojo::Collection
,这是有道理的,因为它是与 CSS 选择器匹配的节点集。 ancestors
方法仅适用于单个节点,因此您必须使用 first
或 last
之类的方法选择一个,或者使用 each
一次处理它们
这里重写了你的代码,它产生了我认为是预期的结果
use strict;
use warnings;
use 5.010;
use open qw/ :std :encoding(UTF-8) /;
use Mojo;
my $url = '
my $ua = Mojo::UserAgent->new->max_redirects(3);
my $dom = $ua->get($url)->res->dom;
my $divs = $dom->find('a div');
printf "%d matching div elements:\n\n", $divs->size;
my $n;
for my $div ( $divs->each ) {
my $spacers = $div->ancestors('div.spacer');
for my $spacer ( $spacers->each ) {
printf "%2d -- %s\n\n", ++$n, $spacer->all_text;
}
}
输出
20 matching div elements:
1 -- Stack Exchange Podcast #65: The Word Has Two Meanings, You See
2 -- PIVOTing into a new career: please welcome Taryn Pratt, bluefooted Community …
3 -- 0 Can't locate module(s) using Mojo::DOM
4 -- 0 tiny runable www::Mechanize examples for the beginner
5 -- 2 Perl WWW::Mechanize and authenticated proxy
6 -- 0 How to process a simple loop in Perl's WWW::Mechanize?
7 -- 1 not able to click a button in www::mechanize perl
8 -- 0 Perl - Mechanize? - How to get all links in a page up to a specific “delimiter” text
9 -- 2 Why am I getting gibberish content using Perl's WWW::Mechanize?
10 -- 1 Getting error in accessing a link using WWW::Mechanize
11 -- 3 Perl WWW::Mechanize Web Spider. How to find all links
12 -- 0 What is the best way to extract unique URLs and related link text via perl mechanize?
13 -- 0 perl WWW::Mechanize file upload error
我是 Mojolicious 的新手。我确信这可能是一个设置问题,但它已经耗尽了我一整天的时间。我正在尝试 运行 这个简单的测试代码
#!/usr/bin/perl
use strict;
use warnings;
use Mojo::DOM;
use Mojo::UserAgent;
my $ua = Mojo::UserAgent->new();
$ua->get(' div')->ancestors('div.spacer')->each( sub { say $_->all_text } );
我在这个位置找到的
find links containing bold text using WWW::Mechanize
它失败了
Can't locate object method "ancestors" via package "Mojo::Collection" at ./test4.pl line 10.
我已经卸载并重新安装了无数次,尝试了不同的软件包安装选项(cpan、cpanm、直接 link 等)。没有骰子。我有点困惑 Mojo::Collection 模块中似乎没有 "ancestors" 方法(继承或不继承),但我已经看到其他几个类似的例子,它们似乎使用了相同的方法一样的方法。它不仅仅是 "ancestors" 模块——这个问题似乎也影响了其他一些方法。
我在 Linux Mint 上使用 perl 5.18.2 和 Mojolicious 包 6.11。
感谢您的帮助。
像这样调试单个长链语句非常困难,最好将其拆分为单独的步骤
将参数传递给 dom
方法与在 DOM 对象上使用该参数调用 find
相同。 find
returns a Mojo::Collection
,这是有道理的,因为它是与 CSS 选择器匹配的节点集。 ancestors
方法仅适用于单个节点,因此您必须使用 first
或 last
之类的方法选择一个,或者使用 each
一次处理它们
这里重写了你的代码,它产生了我认为是预期的结果
use strict;
use warnings;
use 5.010;
use open qw/ :std :encoding(UTF-8) /;
use Mojo;
my $url = '
my $ua = Mojo::UserAgent->new->max_redirects(3);
my $dom = $ua->get($url)->res->dom;
my $divs = $dom->find('a div');
printf "%d matching div elements:\n\n", $divs->size;
my $n;
for my $div ( $divs->each ) {
my $spacers = $div->ancestors('div.spacer');
for my $spacer ( $spacers->each ) {
printf "%2d -- %s\n\n", ++$n, $spacer->all_text;
}
}
输出
20 matching div elements:
1 -- Stack Exchange Podcast #65: The Word Has Two Meanings, You See
2 -- PIVOTing into a new career: please welcome Taryn Pratt, bluefooted Community …
3 -- 0 Can't locate module(s) using Mojo::DOM
4 -- 0 tiny runable www::Mechanize examples for the beginner
5 -- 2 Perl WWW::Mechanize and authenticated proxy
6 -- 0 How to process a simple loop in Perl's WWW::Mechanize?
7 -- 1 not able to click a button in www::mechanize perl
8 -- 0 Perl - Mechanize? - How to get all links in a page up to a specific “delimiter” text
9 -- 2 Why am I getting gibberish content using Perl's WWW::Mechanize?
10 -- 1 Getting error in accessing a link using WWW::Mechanize
11 -- 3 Perl WWW::Mechanize Web Spider. How to find all links
12 -- 0 What is the best way to extract unique URLs and related link text via perl mechanize?
13 -- 0 perl WWW::Mechanize file upload error