Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何获得一个网站';使用Perl和Selenium对HTML进行运行时AJAX更改?_Javascript_Ajax_Perl_Selenium_Web Crawler - Fatal编程技术网

Javascript 如何获得一个网站';使用Perl和Selenium对HTML进行运行时AJAX更改?

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

对于依赖Ajax或javascript呈现数据的网站,如何使用WWW::Selenium保存数据?我下面的代码能够执行所有的点击并访问正确的网页,但是它没有保存数据(我指的是所有竞赛的列表),因为它不在html源代码中。我尝试了$sel->get_body_text(),但也没有成功。您能帮我将渲染数据保存到txt文件或htm文件吗?多谢各位

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并直接获取它。快多了