点击链接PhantomJS

时间:2016-07-03 17:20:27

标签: jquery phantomjs

我需要从没有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();
});

但是没有加载数据。请帮帮我

1 个答案:

答案 0 :(得分:0)

如果您尝试使用行console.log(page.content);显示数据,则实际上即使在点击发生之前也会调用此函数。

思考异步。

点击是在页面加载并注入js后执行的,你根本无法知道什么时候会发生这种情况,具体取决于服务器,网络延迟等。

不幸的是,PhantomJS没有用于Ajax回调的API。

到目前为止,我为类似情况所做的是编写一个观察者来持续监视一个或多个受ajax回调影响的HTML元素。比如说,现在有一个div是空白的,而ajax回调将用一些内容来填充它。我在PhantomJS代码中创建了setIntervalsetTimeout并调用evaluate,后者又观察到该div中的任何更改。从那个evaluate函数我根据我得到的东西返回了一个布尔值并采取了进一步的步骤。但是,您也可以返回内容,而不是放在console.log中,然后退出应用程序。

如果您使用casperJS之类的许多API之一使用wait()http://casperjs.org/),则可以轻松完成此操作 waitFor() waitForResource() waitForSelector() waitWhileSelector() waitForSelectorTextChange() waitForText() waitUntilVisible() waitWhileVisible()