gpt4 book ai didi

node.js - Selenium Webdriver JS 并行抓取 [nodejs]

转载 作者:太空宇宙 更新时间:2023-11-03 23:41:59 25 4
gpt4 key购买 nike

我正在尝试创建一个 Phantom Webdriver 池 [使用 webdriverjs],例如

var driver = new Webdriver.Builder().withCapabilities(Webdriver.Capabilities.phantomjs()).build();

一旦池被填充[我看到产生了n个虚拟进程],我尝试对不同的url执行driver.get[使用池中的不同驱动程序],希望它们能够并行工作[因为 driver.get 是异步的]。

但我总是看到它们是按顺序完成的。我们不能通过不同的 Web 驱动程序实例并行加载不同的 url 吗?如果不可能以这种方式我还能如何解决这个问题?

我的问题的非常基本的实现如下所示

var Webdriver = require('selenium-webdriver'),

function getInstance() {
return new Webdriver.Builder().withCapabilities(Webdriver.Capabilities.phantomjs()).build();
}

var pool = [];
for (var i = 0; i < 3; i++) {
pool.push(getInstance());
}
pool[0].get("http://mashable.com/2014/01/14/outdated-web-features/").then(function () {
console.log(0);
});

pool[1].get("http://google.com").then(function () {
console.log(1);
});

pool[2].get("http://techcrunch.com").then(function () {
console.log(2);
});

PS:已经发了here

更新:我尝试使用 Selenium 网格进行以下设置;正如前面提到的,它可以并行运行测试

中心:

java -jar selenium/selenium-server-standale-2.39.0.jar -hosost 127.0.0.1 -port 4444 -role hub -nodeTimeout 600

幻影:

phantomjs --webdriver=7777 --webdriver-selium-grid-hub=http://127.0.0.1:4444 --debug=true
phantomjs --webdriver=7877 --webdriver-selium-grid-hub=http://127.0.0.1:4444 --debug=true
phantomjs --webdriver=6777 --webdriver-selium-grid-hub=http://127.0.0.1:4444 --debug=true

我仍然看到 get 命令排队并按顺序执行,而不是并行执行。 [但在 3 个实例中正确分布]

我是不是还漏掉了什么?

为什么文档中提到“通过在多台机器上分布测试来扩展(并行执行)”?

什么是集线器并行?我越来越不懂了

最佳答案

我想我遇到了这个问题..

基本上https://code.google.com/p/selenium/source/browse/javascript/node/selenium-webdriver/executors.js#39是同步且阻塞的操作[至少是get]。每当发出 get 命令时, Node 的主线程 get 就会卡在那里。不再执行代码。

关于node.js - Selenium Webdriver JS 并行抓取 [nodejs],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21934794/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com