我需要从没有PhantomJS的网站上获取ajax数据。按链接时会显示数据。
<div class="show-all-goods"><a href="#">Show all</a></div>
这是我的代码:
var page = require('webpage').create();
page.open('http://dveri.com/catalog/dveri-mezhkomnatnyye/dveri-shponirovannyye/', function() {
page.includeJs("https://ajax.googleapis.com/ajax/libs/jquery/3.0.0/jquery.min.js", function() {
page.evaluate(function(){
$('.show-all-goods a').click();
});
});
console.log(page.content);
phantom.exit();
});
但是没有加载数据。请帮帮我
答案 0 :(得分:0)
如果您尝试使用行console.log(page.content);
显示数据,则实际上即使在点击发生之前也会调用此函数。
思考异步。
点击是在页面加载并注入js后执行的,你根本无法知道什么时候会发生这种情况,具体取决于服务器,网络延迟等。
不幸的是,PhantomJS没有用于Ajax回调的API。
到目前为止,我为类似情况所做的是编写一个观察者来持续监视一个或多个受ajax回调影响的HTML元素。比如说,现在有一个div是空白的,而ajax回调将用一些内容来填充它。我在PhantomJS代码中创建了setInterval
或setTimeout
并调用evaluate
,后者又观察到该div中的任何更改。从那个evaluate函数我根据我得到的东西返回了一个布尔值并采取了进一步的步骤。但是,您也可以返回内容,而不是放在console.log
中,然后退出应用程序。
如果您使用casperJS
之类的许多API之一使用wait()
(http://casperjs.org/),则可以轻松完成此操作
waitFor()
waitForResource()
waitForSelector()
waitWhileSelector()
waitForSelectorTextChange()
waitForText()
waitUntilVisible()
waitWhileVisible()