gpt4 book ai didi

javascript - CasperJS 可以在同一进程中运行多个实例吗?

转载 作者:行者123 更新时间:2023-11-29 14:42:51 25 4
gpt4 key购买 nike

我正在尝试在同一进程上运行多个 CasperJS 实例,我的测试代码如下所示:

['user1,pass1', 'user2,pass2'].forEach(function( account ) {
var casperInstance = require('casper').create({
verbose: true,
logLevel: "debug",
webSecurityEnabled: false,
pageSettings: {
loadImages: true,
loadPlugins: true,
userAgent: 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_5) AppleWebKit/537.4 (KHTML, like Gecko) Chrome/22.0.1229.94 Safari/537.4'
}
});

runit(casperInstance, account);
});

function runit(casperi, account) {

casperi.options.viewportSize = {width: 1920, height: 1080};

var account = account.split(',');

casperi.start( 'https://www.example.com/login/', function ( ) {
var x = require('casper').selectXPath;

this.fill('form.loginForm', {
'username': account[0],
'password': account[1]
}, false);

this.click(x('//*[text()="Log in"]'));

}).waitForUrl(/https:\/\/www.example.com\/$/, function then() { // have to use this because the form is submitted with ajax, is there a better way?
//this.echo(this.getHTML());
this.echo('Logged in');
}, function OnTimeout() {
this.echo('Login Failed');
}, 20000);

casperi.run();
}

阵列上只有一个帐户时它工作正常,但有两个或更多时,它总是超时,我不认为我的代码正在运行 casper 的多个实例,因为如果我替换所有登录代码只是打印html(或其他任何内容)它只打印一次。

有没有办法在同一个进程上运行多个 CasperJS 实例,或者创建一个启动器来启动多个进程的唯一解决方案?

最佳答案

是的,您可以使用多个 casper 实例,但您必须记住它们都在同一个 PhantomJS 进程中运行,这与单个桌面浏览器窗口相当。您可以有多个选项卡,但这些选项卡将共享相同的 cookies/localStorage,因此共享相同的 session 。

因为您正在尝试测试登录,这可能是通过 cookie 实现的,所以这是行不通的。第一个“标签”打开登录页面,尝试登录,可能会成功。但是第二个“选项卡”同时尝试同样的事情。服务器可能会检测到这一点,就好像用户双击了一样,并且不继续登录或只进行其中一个登录(此时只是猜测)。

关键是如果你需要不同的 session ,那么你不能在一个进程中使用多个casper实例。显而易见的解决方案是让测试针对多个 PhantomJS 实例(可能是某种池)中的每个用户名和密码组合运行。

关于javascript - CasperJS 可以在同一进程中运行多个实例吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36441460/

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