in reply to WWW::Mechanize::Chrome VERY slow on xpath obtaining TDs of a TR
I had a quick glimpse into the docs of ->xpath
and found this passages and emphasized two parts
-
$mech->xpath( $query, %options )
- my $link = $mech->xpath('//a[id="clickme"]', one => 1);
# croaks if there is no link or more than one link found - my @para = $mech->xpath('//p');
# Collects all paragraphs - my @para_text = $mech->xpath('//p/text()', type => $mech->xpathResult('STRING_TYPE'));
# Collects all paragraphs as text - node - node relative to which the query is to be executed. Note that you will have to use a relative XPath expression as well. Use
-
.//foo
instead of
//foo
Querying relative to a node only works for restricting to children of the node, not for anything else. This is because we need to do the ancestor filtering ourselves instead of having a Chrome API for it.
two insights into potential bottlenecks so:
- the module has to identify the parent itself, instead of assembling an xpath. Putting all into one path by yourself might be far more efficient (and probably your identifier is not as unambiguous as you thought)
- you might get expensive wrapper objects for each result, unless you specify a type of text
Of course this is all speculation as long as you can't provide an SSCCE ... :)
Cheers Rolf
(addicted to the 𐍀𐌴𐍂𐌻 Programming Language :)
Wikisyntax for the Monastery
In Section
Seekers of Perl Wisdom