Javascript 如何获得一个网站';使用Perl和Selenium对HTML进行运行时AJAX更改?
对于依赖Ajax或javascript呈现数据的网站,如何使用WWW::Selenium保存数据?我下面的代码能够执行所有的点击并访问正确的网页,但是它没有保存数据(我指的是所有竞赛的列表),因为它不在html源代码中。我尝试了$sel->get_body_text(),但也没有成功。您能帮我将渲染数据保存到txt文件或htm文件吗?多谢各位Javascript 如何获得一个网站';使用Perl和Selenium对HTML进行运行时AJAX更改?,javascript,ajax,perl,selenium,web-crawler,Javascript,Ajax,Perl,Selenium,Web Crawler,对于依赖Ajax或javascript呈现数据的网站,如何使用WWW::Selenium保存数据?我下面的代码能够执行所有的点击并访问正确的网页,但是它没有保存数据(我指的是所有竞赛的列表),因为它不在html源代码中。我尝试了$sel->get_body_text(),但也没有成功。您能帮我将渲染数据保存到txt文件或htm文件吗?多谢各位 use WWW::Selenium; open (FO, ">test.htm"); my $sel = WWW::Selenium->ne
use WWW::Selenium;
open (FO, ">test.htm");
my $sel = WWW::Selenium->new( host => "localhost",
port => 4444,
browser => "*firefox",
browser_url => "https://www.kaggle.com/competitions/",
);
$sel->start;
$sel->open("https://www.kaggle.com/competitions/");
$sel->click("all-switch");
$sel->click("completed");
print FO $sel->get_html_source();
print "Done\n";
免责声明:我没有尝试过强> 您应该能够使用运行一些JavaScript来为您获取完整的当前DOM。这与页面的正文不同,因为DOM是当前的表示形式,而不是浏览器最初解析的内容
my $html = $sel->get_eval(q{document.getElementsByTagName('html')[0].outerHTML});
当我在浏览器的控制台中运行JS时,它会给出整个页面的当前表示形式。下面是一个代码片段,它创建了一个空的
,然后使用jQuery向其中添加一些文本,然后使用上面的纯JS代码获取完整文档的HTML并发出警报。您将看到它包含我们添加的文本
$('foo')。文本(“条”);
警报(document.getElementsByTagName('html')[0].outerHTML)代码>
谢谢,但它不起作用。my$html=$sel->get_eval(q{window.document.getElementsByTagName('html')[0].outerHTML});生成与我的$html=$sel->get_html_source()相同的结果;羞耻。我将尝试,如果我设法安装这个东西。该模块是否与新版本的Selenium配合使用?文件里的那个已经不推荐了。嗨,辛巴基,我终于弄明白了。它不起作用,因为:即使调用$sel->click(“所有开关”)并显示在浏览器上,DOM也不会更新。在我使用$sel->get_eval()调用Javascript事件后,它成功了!感谢您帮助我了解如何使用$html=$sel->get_eval(q{document.getElementsByTagName('html')[0].outerHTML})保存DOM。这是一个有趣的学习过程,我自己也弄明白了如何等到Ajax完全加载,DOM完全呈现。谢谢你的灵感。我认为最重要的技能之一是能够阅读和理解文档。这并不像听起来那么容易。我很高兴你学到了一些东西,而不仅仅是抄袭答案。这比这更有价值。:-)现在另一个技巧是不耐烦。因此,如果Ajax只是提取并添加一些数据,而这些数据正是您真正想要的,那么只需使用lwp并直接获取它。快多了