Selenium Cookie跨域详解

实际上也不能说是严格意义的跨域,因为我们的跨域只针对同源策略中的部分情况,也就是在host为不同子域的情况,这类问题其实是比较常见的,在大型网站中使用到的单点登录等技术的情况下,我们才会遇到诸如登录页面为login.codesy.me,而我的目标页面是admin.codesky.me。

那么此时如果我简单的设置Cookie,实际上设置的是login.codesky.me的Cookie,对于admin.codesky.me是不起作用的,而又不能直接通过Selenium去设置(因为本质上就是一个浏览器嘛)。

但是尽管不能设置在admin.codesky.me,我们可以把Cookie设置在.codesky.me中,这样会匹配到全部的子域。

当然,在Selenium中,光设置完Cookie还不行,需要再次访问需要访问的页面。

为了避免Cookie的作用域被滥用,访问成功后,我们可以考虑删除后重设(刚发现这段代码的Bug……之后改了再补):

module.exports = function(sessionId) {
  const url = 'http://portal.shmtu.edu.cn/dcp/forward.action?path=/portal/portal&p=stuHomePage';
  return this.url(url)
            .setCookie({name: 'JSESSIONID', value: sessionId, domain: '.shmtu.edu.cn'})
            .url(url)
            .deleteCookie({name: 'JSESSIONID'})
            .setCookie({name: 'JSESSIONID', value: sessionId, domain: 'portal.shmtu.edu.cn'})
            .getTitle()
            .then(function(title) {
              return !/登录/i.test(title);
            });
};

参考链接:http://blog.csdn.net/zm_21/article/details/49781899

植入部分

如果您觉得文章不错,可以通过赞助支持我。

如果您不希望打赏,也可以通过关闭广告屏蔽插件的形式帮助网站运作。

标签: 知识, 代码段, selenium

添加新评论