2

我使用 WWW::Selenium 模块编写了一个简单的 perl 脚本,该模块与 Selenium RC 服务器交互并进入网页并下载源代码。我可以用 HTML 页面做到这一点。但是,我有一个要下载其源代码的 XML 页面。'get_source_html()' 函数显然不可能做到这一点。下面是我想要做的脚本:

#!/usr/bin/perl -sw
use WWW::Selenium;

print "\n setting up Selenium...\n";
my $sel = WWW::Selenium->new( host => "localhost",
port => 4444,
browser => "*firefox",
browser_url => "http://www.google.com",
);

print " starting Selenium...\n";
$sel->start;

$sel->open('someXMLpage...');
$sel->wait_for_page_to_load();

my $xml = $sel->get_html_source();
print $xml;

正如您所看到的,get_html_source 显然是一个问题,因为它会返回一个错误,指出该页面不是 html。有什么方法可以让我下载浏览器中可见的当前页面,而不管页面类型如何(比如在 Firefox 中单击“查看源代码”,甚至更好:一些 get_source() 函数)?另请注意,我需要使用的 url 不会以“.xml”文件结尾。如果这意味着什么,该页面是即时生成的......

任何智慧都非常感谢!

4

3 回答 3

1

您需要 Selenium RCget_page_source()功能。即使“页面”不是 HTML(甚至是纯文本,而不仅仅是 XML),它也可以工作。

于 2012-09-11T23:53:11.167 回答
0

Selenium::Remote::Driver Perl 模块确实提供了一个 get_page_source 函数。

另一方面,WWW::Selenium 没有提供这样的方法。它只提供了一个 get_html_source 函数,该函数返回开始和结束“html”标签之间的整个 HTML 源代码。

但是,通过 WWW::Selenium 获取 XML 文档内容的一种解决方法是使用它的 get_eval 函数来评估将完成这项工作的 JavaScript 片段。例如,以下行返回浏览器窗口中包含的文档的根节点/元素的 XML 内容:

my $xml = $sel->get_eval("new XMLSerializer().serializeToString(window.document.documentElement)");
于 2013-12-16T09:11:50.863 回答
-1

尝试:

$sel->get_body_text();
于 2012-09-07T10:15:55.247 回答