javascript - 像真正的浏览器一样用 phantomjs 打开标签页

标签 javascript phantomjs

PhantomJS 是一个 headless 的 WebKit 浏览器。我可以用它打开一个 url 并获取每秒更新的页面内容。

但是我需要同时获取很多(100)个页面的内容。

所有页面必须同时打开并每秒刷新。

一页可以,但我不知道如何一次从多个页面检索。

这是 example code from the PhantomJS website :

console.log('Loading a web page');
var page = require('webpage').create();
var url = 'http://www.phantomjs.org/';
page.open(url, function (status) {
  //Page is loaded!
  phantom.exit();
});

我可以同时使用多个 PhantomJS 实例吗?我似乎不是最好的方法。有谁知道如何只打开一个 PhantomJS 实例并从多个页面获取内容吗?

最佳答案

这是我之前用来解析电子商店的项目并为这些项目的每个页面放置 HTML 代码的代码

希望对您有所帮助!

var RenderUrlsToFile, system, url_string_for_array;
var arrayOfUrls = new Array();

system = require("system");

RenderUrlsToFile = function(urls, callbackPerUrl, callbackFinal) {
var getFilename, next, page, retrieve, urlIndex, webpage, link_name, sex;

var fs = {};
fs = require('fs');

urlIndex = 0;
webpage = require("webpage");
page = null;
// getFilename = function() {
//     return "parsed/" + urlIndex + ".png";
// };
next = function(status, url, file) {
    page.close();
    callbackPerUrl(status, url, file);
    return retrieve();
};
retrieve = function() {
    var url;
    if (urls.length > 0) {
        url = urls.shift();
        urlIndex++;
        page = webpage.create();
        page.viewportSize = {
            width: 800,
            height: 600
        };
        page.settings.userAgent = "Phantom.js bot";
        return page.open("http://" + url, function(status) {
            var file;
            // file = getFilename();
            if (status === "success") {
                return window.setTimeout((function() {
                    // page.render(file);

                    var js = page.evaluate(function () {
                            return document;
                        });

                    fs.write('your_file_path'.html', js.all[0].outerHTML, 'w');

                    return next(status, url, file);
                }), 100);
            } else {
                return next(status, url, file);
            }
        });

    } else {
        return callbackFinal();
    }
};
return retrieve();
};

if (system.args.length > 1) {
arrayOfUrls = Array.prototype.slice.call(system.args, 1);
} else {

------------您问题的主要代码部分------

例如:我需要解析电子商店中的商品,所以我选择第一页,然后我为准确的页数设置“for”

url_string_for_array = "www.lamoda.ru/c/559/accs-muzhskieaksessuary/?genders=men&page=1";

for(var k=2; k<20; k++)
    {
        url_string_for_array += ",www.lamoda.ru/c/559/accs-muzhskieaksessuary/?genders=men&page="+k;
    }

arrayOfUrls = url_string_for_array.split(',');
}

RenderUrlsToFile(arrayOfUrls, (function(status, url, file) {
if (status !== "success") {
    return console.log("Unable to render '" + url + "'");
} else {
    return console.log("Rendered '" + url + "'");
}
}), function() {
return phantom.exit();
});

关于javascript - 像真正的浏览器一样用 phantomjs 打开标签页,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21073392/

相关文章:

javascript - JavaScript 中奇怪的数组行为

javascript - PhantomJS 运行 JS 的 HTML 页面结果中如何获取嵌入的 JSON 对象并将其传递给 java 代码?

javascript - 如何在 CasperJS 中设置 wait() 的值?

javascript - 需要在同步 CasperJS 中运行 for 循环和 WaitFor

javascript - 如何选择在 jquery 函数中使用的数据状态?

java - 从 GWT 客户端代码调用 Java Applet 方法时,调用 NPObject 上的方法时出错

javascript - 当音频包含在另一个PHP文件中时,音频不起作用

javascript - AngularJS 中自动完成指令的问题

php - 多个 system() 调用是否在不同的线程/进程中工作?

javascript - casperjs:如何单击远程 div,然后更新其类名?