当前位置: 首页 > 面试题库 >

如何在不同的casperjs进程之间持久化cookie

宗政兴发
2023-03-14
问题内容

这是一个关于如何将cookie从一个casperjs页持久化到另一个页面的问题。

所以基本上我得到了一个nodejs文件,该文件生成casperjs作为工作人员执行某些任务。一个是登录,一旦登录,我就将cookie存储在文件中。

当我产生下一个Casper工人时..我希望它使用Cookie而不是再次登录..这两种方法均 失败

第一: 当我生成worker capserjs时,我添加了–cookies-file =。/ cookiefilename即 var child = spawn('casperjs',['scrape.js','--cookies-file=./'+cookieFileName]);

第二: 在casperjs worker文件中。我让它从文件中读取并设置cookie,即

var casper = require('casper').create();
var cookieFileName = 'monsterCookie.txt';

// grab cookies from file 
var fs = require('fs');
var utils = require('utils');
var cookies = fs.read(cookieFileName);

casper.page.setCookies(cookies);

casper.start('domain/page.html', function() {
    //FAIL! cookies aren't used here
    this.debugHTML();
});

casper.run();

笔记:

  1. 有人提到早些时候start移除了曲奇饼从页面?如果是这样,我该如何防止呢?

  2. 我知道会话持久同一phantomjs页面对象中(见这里https://gist.github.com/abbood/5347252)和相同casperjs页面对象中的同样的情况(见这里https://gist.github.com/ abbood / 5347287)

  3. 请记住,我将cookie保留在文件中(即完全不进行任何json / cookie解析)..因此,我的cookie文件看起来就像这样

路径= / \ 0 \ 0 \ 0 \ xc4 \ x41 \ x43OOKIE =
C8ctADE3OC4xMzUuMTQ3LjM5LTI4NzQ5NzQ0LjMwMjkxMjYxAAAAAAAAAAABAAAAmyoBAMo +
ZFHhPWRRAQAAAAJWAADKPmRR4T1; expires =星期四,2015年4月9日16:16:10 GMT;domain =
statse.domain.com; 路径= / \ 0 \ 0 \ 0Yv1st = CE061E87215F2D73; expires =
Wed,19-Feb-2020 14:28:00 GMT; domain = .domain.com; 路径= / \ 0 \ 0 \ 0 \ x84
\ x43OOKIE_ID = 178.135.147.39-2368749744.30291261; expires
=星期五,2023年4月7日16:16:11 GMT;domain = cookie.domain.com; 路径= / DCS000065_7K5I
\ 0 \ 0 \ 0 \ xbe \ x41 \ x43OOKIE =
C8ctADE3OC4xMzUuMTQ3LjM5LTIzNjg3NDk3NDQuMzAyOTEyNjEAAAAAAAABAABAAAAQQAAAM0 +
ZFHNPmRRAQAAAAEAAADNPmRR expires =星期五,2023年4月7日16:16:13 GMT;domain =
cookie.domain.com; path = /)“ expires = Wed,19-Feb-2020 14:28:00 GMT; domain
= .domain.com; 路径= / \ 0 \ 0 \ 0 \ x84 \ x43OOKIE_ID =
178.135.147.39-2368749744.30291261; expires =星期五,2023年4月7日16:16:11
GMT;domain = cookie.domain.com; 路径= / DCS000065_7K5I \ 0 \ 0 \ 0 \ xbe \ x41
\ x43OOKIE =
C8ctADE3OC4xMzUuMTQ3LjM5LTIzNjg3NDk3NDQuMzAyOTEyNjEAAAAAAAABAABAAAAQQAAAM0 +
ZFHNPmRRAQAAAAEAAADNPmRR expires =星期五,2023年4月7日16:16:13 GMT;domain =
cookie.domain.com; path = /)“ expires = Wed,19-Feb-2020 14:28:00 GMT; domain
= .domain.com; 路径= / \ 0 \ 0 \ 0 \ x84 \ x43OOKIE_ID =
178.135.147.39-2368749744.30291261; expires =星期五,2023年4月7日16:16:11
GMT;domain = cookie.domain.com; 路径= / DCS000065_7K5I \ 0 \ 0 \ 0 \ xbe \ x41
\ x43OOKIE =
C8ctADE3OC4xMzUuMTQ3LjM5LTIzNjg3NDk3NDQuMzAyOTEyNjEAAAAAAAABAABAAAAQQAAAM0 +
ZFHNPmRRAQAAAAEAAADNPmRR expires =星期五,2023年4月7日16:16:13 GMT;domain =
cookie.domain.com; path = /)“


问题答案:

保存Cookie:

var fs = require('fs');
var cookies = JSON.stringify(phantom.cookies);
fs.write(cookieFilename, cookies, 644);

恢复Cookie:

var fs = require('fs');
var data = fs.read(cookieFilename);
phantom.cookies = JSON.parse(data);

phantom是PhantomJS全局变量。您可以在Wiki中获得更多信息



 类似资料:
  • 问题内容: 如何保持在unitttest中继承的同一对象内所做的更改? 即:我希望以上两项测试通过 问题答案: 正如一些评论所回响的那样,以这种方式构造测试可能是测试本身的设计缺陷,您应该考虑对其进行重组。但是,如果您要执行此操作,并且依赖于所使用的测试运行程序以字母(看似)顺序执行它们的事实,那么我建议以下内容。 类似于@Matthias所说的,但是对于以后您可能决定从该类继承的情况,我会做不同

  • 我正在使用一个用Groovy编写的Spock测试来测试一些Java代码。我使用JMockit来模拟java代码中的方法,因为Spock只处理模拟Groovy类。我遇到了一个问题,在测试之间存在一个JMockit。这样的模拟实例应该只存在于测试中(根据JMockit文档),但这不起作用,我想这是因为它没有使用JMockit测试运行器,而是使用了Spock测试运行器。 问题 有什么方法可以手动移除JM

  • 本文向大家介绍c# 如何实现不同进程之间的通信,包括了c# 如何实现不同进程之间的通信的使用技巧和注意事项,需要的朋友参考一下   进程之间的通信是为了解决不同进程之间的数据传输问题,这样可以让不同程序交互数据。实现进程通信的方式:1、剪切板;2、COM;3、内存映射文件;4、WCF 1、剪切板Clipboard在进程间传送对象   剪切板是一个供应用程序使用的公有区域。在.NET中定一个了一个D

  • 问题内容: 我有以下问题。我编写了一个函数,该函数将列表作为输入并为列表中的每个元素创建一个字典。然后,我想将此字典追加到新列表中,以便获得字典列表。我正在尝试为此生成多个进程。我在这里的问题是,我希望不同的进程访问字典列表,因为它由其他进程更新,例如,一旦达到一定长度,就打印一些东西。 我的例子是这样的: 现在我的问题是每个过程都创建自己的过程。有没有一种方法可以在进程之间共享列表,以便所有字典

  • 我在试图通过Kafka流实现以下目标时遇到了一些困难: 在应用程序启动时,(压缩的)主题α被加载到键值StateStore中 Kafka流从另一个主题中消费,使用上面的映射(get),并最终在主题alpha中生成一个新记录 结果是,即使拖缆重新启动,内存中的映射也应与底层主题对齐 我的方法如下: 装载机Treamer(store): : ...但是我得到的是: 试图获取存储处理程序时。 你知道如何

  • 问题内容: 有没有办法在python中“持久”进行子过程调用?我正在调用一个程序,该程序需要一段时间才能加载多次。因此,如果我不关闭程序就可以保持打开状态并与之通信,那将是很好的。 我的python脚本的卡通版本如下所示: 我需要分别处理每个文本,因此将它们全部合并到一个大文本文件中并进行一次处理不是一种选择。 最好,如果有这样的选择 我可以让流程保持开放状态,对此我将非常感激。 问题答案: 您可