如何使用嵌入在第三方页面的代码获取自己站点的cookie信息
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用嵌入在第三方页面的代码获取自己站点的cookie信息相关的知识,希望对你有一定的参考价值。
由于安全问题,cookie只能访问对象只能来自同一个域。所以,你需要将获取cookie的代码放在同一个域。
或者通过修改表头信息来hack到,这种方法麻烦,而且是黑客技术,出于法律相关,我不能向你说更多。
另外,如果你使用的是chrome或者类似的支持插件的浏览器,可以通过contentScript来实现,这是一个大内容。具体可以参考相关的官方文档。
cookie是加密的信息,你获取来意义不大,它的验证方法会把相关信息发到服务器,一旦不符合就不符合了。 参考技术A 无论是iframe 还是 直接发起http请求 .都涉及到p3p问题. 和某些浏览器的默认第三方cookie屏蔽. 比如safari的高级版本. 写入是同理的.. js 写入或服务器端响应时写入..所以... 看你如何选了...
如何获取嵌入在 PhantomJS 运行的 JS 的 HTML 页面结果中的 JSON 对象并将它们传递给 java 代码?
【中文标题】如何获取嵌入在 PhantomJS 运行的 JS 的 HTML 页面结果中的 JSON 对象并将它们传递给 java 代码?【英文标题】:How to get JSON objects embedded in HTML page result of JS running by PhantomJS and pass them to java code? 【发布时间】:2017-05-22 01:56:12 【问题描述】:我使用this answer 中描述的JS 脚本代码,但我不想将html 结果页面保存在html 文件中。我想从<div class="rg_meta">
中提取 Json 对象并将它们传递给 Java 代码。
在搜索中,我发现使用“文档”,但出现未定义的错误。我是 PhantomJS 的新手,在 Java 中使用 JSON。
var page = require('webpage').create();
var fs = require('fs');
var system = require('system');
var url = "";
var searchParameter = "";
var count=0;
if (system.args.length === 4)
url=system.args[1];
searchParameter=system.args[2];
count=system.args[3];
if(url==="" || searchParameter==="")
phantom.exit();
page.settings.userAgent = 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.120 Safari/537.36';
page.zoomFactor = 0.1;
page.viewportSize =
width: 1920,
height: 1080
;
var divCount="-1";
var topPosition=0;
var unchangedCounter=0;
page.open(url, function(status)
console.log("Status: " + status);
if(status === "success")
window.setInterval(function()
var newDivCount = page.evaluate(function()
var divs = document.querySelectorAll(".rg_di.rg_bx.rg_el.ivg-i");
return divs[divs.length-1].getAttribute("data-ri");
);
topPosition = topPosition + 1080;
page.scrollPosition =
top: topPosition,
left: 0
;
if(newDivCount===divCount)
page.evaluate(function()
var elems=document.getElementByClassName("rg_meta");
console.log(elems.length);
var button = document.querySelector("#smb");
if(!(typeof button === "undefined"))
button.click();
console.log('Clicked');
return true;
else
return false;
);
if(parseInt(unchangedCounter,10) === parseInt(count,10))
/* var path = searchParameter+'.html';
fs.write('seedHtml/'+path, page.content, 'w');
console.log('printing html');*/
phantom.exit();
else
unchangedCounter=unchangedCounter+1;
else
unchangedCounter=0;
divCount = newDivCount;
, 500);
else
phantom.exit();
);
【问题讨论】:
没有名为document.getElementByClassName
的函数。它实际上是document. getElementsByClassName
(Elements
,而不是Element
)。我认为这就是为什么您会收到 undefined
错误。你可以试试这个吗?
非常感谢,它不返回错误,它现在返回 0 结果。
好的,现在你可以使用console.log(elems[0])
来打印它的内容了。然后你可以在 Java 代码或其他地方使用它,我想。
div元素可以使用数据属性,请到sitepoint.com/use-html5-data-attributes看看
【参考方案1】:
HTML5 数据属性
幸运的是,HTML5 引入了自定义数据属性。
<div id="msglist" data-user="bob" data-list-size="5" data-maxage="180"></div>
自定义数据属性:
是字符串 - 您可以存储任何可以字符串编码的内容,例如 JSON。 类型转换必须在 JavaScript 中处理。 只有在不存在合适的 HTML5 元素或属性时才应使用。
JavaScript 解析 #1:
每个浏览器都允许您使用 getAttribute 和 setAttribute 方法获取和修改数据属性,例如
var msglist = document.getElementById("msglist");
var show = msglist.getAttribute("data-list-size");
msglist.setAttribute("data-list-size", show+3);
它可以工作,但只能用作旧浏览器的后备。
JavaScript 解析 #2:
从 1.4.3 版本开始,jQuery 的 data() 方法已经解析了 HTML5 数据属性。您无需指定 data- 前缀,因此可以编写等效代码:
var msglist = $("#msglist");
var show = msglist.data("list-size");
msglist.data("list-size", show+3);
希望对你有帮助!!!
【讨论】:
以上是关于如何使用嵌入在第三方页面的代码获取自己站点的cookie信息的主要内容,如果未能解决你的问题,请参考以下文章
如何获取嵌入在 PhantomJS 运行的 JS 的 HTML 页面结果中的 JSON 对象并将它们传递给 java 代码?