gpt4 book ai didi

google-chrome-extension - chrome 扩展中的不可见选项卡

转载 作者:行者123 更新时间:2023-12-04 22:57:47 24 4
gpt4 key购买 nike

我基本上想通过使用 Chrome 扩展来自动化网站。但是这个网站有非常多的客户端代码,所以很难找出我需要发出哪个请求才能获得所需的信息。

我能想到的最简单的方法是使用内容脚本在输入元素中输入文本并单击按钮,如下所示(在这种情况下使用 jQuery):

$.ready(function(){
$("#input").val("foo");
$("#submit").click();
});

非常类似于这个问题: Injecting input into a tab opened by a Chrome Extension ,但与该网站的交互不应该是可见的。

那么:我可以从扩展程序中打开用户看不到的 chrome 页面并使用它们与网站交互吗?

最佳答案

如果您希望页面完全不可见,我相信唯一的选择是将其加载到背景页面上的 iframe 中。然后,您可以使用内容脚本访问 iframe 中的页面,就像访问任何正常的可见页面一样。

由于许多网站使用 X-Frame-Options 限制嵌入 header ,在将页面加载到 iframe 之前,您可能必须使用 webRequest API 删除该 header 。一些页面还使用其他技术来防止嵌入,这可能会使这进一步复杂化。

示例代码:

manifest.json

{
"manifest_version": 2,
"name": "Hidden page in background",
"description": "Interact with a hidden page in background",
"version": "1.0",

"background": {
"page": "background.html",
"persistent": true
},
"content_scripts": [
{
"matches": ["*://*.google.fr/*"],
"js": ["contentscript.js"],
"all_frames": true
}
],
"permissions": ["*://*.google.fr/*", "webRequest", "webRequestBlocking"]
}

背景.html
<!DOCTYPE html>
<html>
<head>
<script src="background.js"></script>
</head>
<body>
<iframe id="iframe1" width="1000 px" height="600 px" src="http://www.google.fr"></iframe>
</body>
</html>

背景.js
// This is to remove X-Frame-Options header, if present
chrome.webRequest.onHeadersReceived.addListener(
function(info) {
var headers = info.responseHeaders;
var index = headers.findIndex(x=>x.name.toLowerCase() == "x-frame-options");
if (index !=-1) {
headers.splice(index, 1);
}
return {responseHeaders: headers};
},
{
urls: ['*://*.google.fr/*'], //
types: ['sub_frame']
},
['blocking', 'responseHeaders']
);

内容脚本.js
var elementToInsert = document.createElement("h1");
elementToInsert.textContent = "This text comes from my content script.";
document.body.insertBefore(elementToInsert, document.body.firstChild);

几个笔记:
  • 删除X-Frame-Options header 不限于此处的背景页面。它也允许将相关页面嵌入到任何其他页面的 iframe 中。不幸的是,Chrome 似乎不支持 ALLOW-FROM uri可用于限制仅嵌入到您的扩展程序的值。
  • 内容脚本被注入(inject)到这里的所有页面。您可以仅以编程方式将其注入(inject)背景页面上的 iframe,但这会变得有点复杂。
  • 我用了www.google.fr例如,因为它使用 X-Frame-Options ,但不使用任何其他技术来防止嵌入。我使用法语域名是因为 google.com倾向于自动重定向到本地国家级域。
  • 关于google-chrome-extension - chrome 扩展中的不可见选项卡,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37552028/

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