2012-09-07 58 views
2

我用WWW :: Selenium模塊編寫了一個簡單的perl腳本,該模塊與Selenium RC服務器交互並進入網頁並下載源代碼。我可以用HTML頁面做到這一點。但是,我有一個XML頁面,我想下載它的源代碼。 'get_source_html()'函數顯然不可行。下面是我想做的腳本:Selenium RC Perl腳本如何獲取xml頁面的源代碼?

#!/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。有什麼方法可以下載瀏覽器中顯示的當前頁面,而不管頁面的類型如何(比如點擊'view source'在firefox中,甚至更好:一些get_source()函數)?另外請注意,我需要使用的網址並不以'.xml'文件結尾。該頁面是即時生成的,如果這意味着什麼...

任何智慧大大感謝!

回答

1

你想要的硒RC get_page_source()功能。即使「頁面」不是HTML(甚至是純文本,而不僅僅是XML),它也可以工作。

+0

是的,get_page_source()解決了我的問題! :) – CODEBLACK

-1

嘗試:

$sel->get_body_text(); 
+2

thx for the response!不幸的是,這(固執地)不想爲我工作。我發現Selenium :: Remote :: Driver模塊的解決方法。它的get_page_source()函數能夠爲我做到這一點。 – CODEBLACK

+0

這不起作用,因爲XML文件沒有標記。 –

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)"); 
相關問題