Javascript 使用phantomjs打开选项卡,就像真实浏览器一样

Javascript 使用phantomjs打开选项卡,就像真实浏览器一样,javascript,phantomjs,Javascript,Phantomjs,PhantomJS是一款无头WebKit浏览器。我可以用这个打开一个url,并获得每秒更新的页面内容 但是我需要同时获得多(100)页的内容 所有页面必须同时打开并每秒刷新 一个页面是可能的,但我不知道如何一次从多个页面检索 这是: 我可以一次使用多个PhantomJS实例吗?我似乎不是最好的方法。有人知道如何只打开一个PhantomJS实例并从多个页面获取内容吗?下面是代码,我以前用它来解析电子商店的商品,并为这些商品的每个页面添加HTML代码 我希望它能帮助你 var RenderUrlsT

PhantomJS是一款无头WebKit浏览器。我可以用这个打开一个url,并获得每秒更新的页面内容

但是我需要同时获得多(100)页的内容

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

一个页面是可能的,但我不知道如何一次从多个页面检索

这是:


我可以一次使用多个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;
    }

你能创建更多的
page
实例吗?也许是数组?我不确定。。。因为页面必须打开很长时间。。。我也是javascript的初学者。。可以解释我吗?@Unsigned可以给我举一些例子吗?您可能无法可靠地并行拉取页面,因为这样做会导致
完成的
信号重叠,变得毫无意义。如果您还不了解阵列,这对于学习项目来说可能有点高级。谷歌“javascript数组”获取详细信息。
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();
});