不能在页面中设置cookie.评估PhantomJS

Can't set cookies in page.evaluate PhantomJS

本文关键字:cookie 评估 PhantomJS 设置 不能      更新时间:2023-09-26

我需要获取cookie并在PhantomJS中设置它们以请求第二个服务器site2.com

page.open("http://site1.com", function(){
  page.evaluate(function(){
    var d = document.createElement('script');
    d.src = "http://site2.com/javascript_file.js"
    document.appendChild(d);
  });
});

_http://site1.com第一个服务器,在PhanotmJS中设置cookie (成功)

_http://site2.com第二个服务器,不能设置cookie在phantomjs (不成功)

问题在哪里?如何解决这个问题?

页面上的JavaScript只能为JavaScript运行的域设置cookie。如果你在page.evaluate()中通过document.cookie设置cookie而你现在在site1.com,那么你只能为site1.com设置cookie

通常情况下,您首先必须从您想要设置cookie的域打开一些页面,但您也可以利用phantom.addCookie(obj)函数设置"。site2.com"的domain属性。您需要在通过page.evaluate()添加脚本标记之前这样做。请记住,phantompage.evaluate()中不可用。

另外,在实际添加cookie之前可能需要一段时间,所以我添加了一个简短的setTimeout()

应该这样做:

page.open("http://site1.com", function(){
    phantom.addCookie({
        'name': 'Cookie-Name',
        'value': 'Cookie-Value',
        'domain': 'site2.com'
    });
    setTimeout(function(){
        page.evaluate(function(){
            var d = document.createElement('script');
            d.src = "http://site2.com/javascript_file.js"
            document.appendChild(d);
        });
    }, 200);
});