首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何通过Perl和Selenium应用运行时AJAX更改来获取网站的HTML?

问如何通过Perl和Selenium应用运行时AJAX更改来获取网站的HTML?
EN

Stack Overflow用户
提问于 2015-10-02 09:53:43
回答 1查看 144关注 0票数 2

对于依赖Ajax或javascript呈现数据的网站,如何使用WWW::Selenium保存数据?我的以下代码能够执行所有的点击并到达正确的网页,但是它没有保存数据(我的意思是所有比赛的列表),因为它不在html源代码中。我尝试了$sel->get_body_text(),但也不起作用。你能帮我把渲染的数据保存到txt文件或htm文件吗?谢谢。

代码语言:javascript
复制
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";
EN

回答 1

Stack Overflow用户

发布于 2015-10-02 16:11:12

免责声明:我还没有尝试过!

您应该能够使用get_eval($script)运行一些JavaScript,为您获取完整的当前DOM。这与页面的正文文本不同,因为DOM是当前的表示形式,而不是浏览器最初解析的内容。

代码语言:javascript
复制
my $html = $sel->get_eval(q{document.getElementsByTagName('html')[0].outerHTML});

当我在浏览器的控制台中运行该JS时,它会给出整个页面的当前表示。下面的代码片段创建一个空的<div>,然后使用jQuery向其中添加一些文本,然后使用上面的普通JS代码来获取整个文档的<div>并对其进行alert。您将看到它包含我们添加的文本。

​

代码语言:javascript
复制
$('#foo').text("bar");
alert(document.getElementsByTagName('html')[0].outerHTML);
代码语言:javascript
复制
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="foo" />

​

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32899403

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档