gpt4 book ai didi

javascript - 使用 JS 更改网站时如何保留范围或携带变量

转载 作者:行者123 更新时间:2023-12-02 23:37:32 25 4
gpt4 key购买 nike

我正在用 JavaScript 编写一个简单的 Clickbot,以在第 3 方网站上执行重复任务。它只是设置输入值,调用 click()按钮的方法,也许我会让它导航到同一网站的其他 URL。我最初使用 Firefox,但使用 Internet Explorer 时也出现同样的情况。

到目前为止,我使用纯 JS,只要我自己粘贴每个命令,一切都正常,但问题是:任何时候加载新页面时(包括当 JS 单击提交按钮时)我都会丢失所有变量和函数我定义的。请注意,我使用 Web 控制台而不是 <script>当加载新的 DOM 时,该标签必然会被删除。

老实说,我不完全明白为什么会发生这种情况。我查看了 JavaScript 范围和 window.location 的文档和document.locationThis site甚至提到“在网络浏览器中,当您关闭浏览器窗口(或选项卡)时,全局变量将被删除,但仍可用于加载到同一窗口中的新页面。” (参见 here ,但这不是重点)

我认为这可能是因为默认情况下可能会启用严格模式,但这会引发 name = "value" 的错误而不是默默地将其解释为局部变量。

根据this answer ,在任何方法之外声明的任何 var 都应该是全局变量,即 window.更改窗口的另一个属性(例如位置)不应影响它们 - 就我的推理而言 - 但即使我自己分配属性,当我加载另一个页面时它们也会消失。

我想,如果我编写自己的网站,该网站具有我需要的 iFrame 网站,那么我的脚本运行的页面实际上不会更改,那么可以解决这个问题。但这仍然很奇怪。谁能解释这种行为?还有另一种(简单的)方法吗?

[编辑1]感谢same-origine policy我建议的使用自己的网站和 iframe 的解决方法不起作用。由于我的 Clickbot 的全部目的是启动一次并自行单击所有页面,因此一种传输数据(即包括 JSON 的字符串)的方法可以回答这个问题,但不能解决我的问题。

[编辑2]对于 future 的访问者:经过最近的编辑,接受的答案确实提供了我需要的所有信息。如果您可以使用插件,那么 Greasemonkey 是您的最佳选择,但小书签和 sessionStorage 的组合仍然允许一个像样的机器人,只需一个用户输入即可执行两次重新加载之间的所有步骤。另一种(丑陋的机器人可能更强大)方法是打开目标网站并使用 document.body.innerHTML和 iframe 解决方法。这样您就可以绕过同源策略,根据需要构建自己的网站,并且仍然可以访问目标网站。

最佳答案

关于变量的生命周期this SO question详细说明,但变量不会在重新加载后持续存在。

如果您位于同一个域中(例如,所有事情都发生在 https://example.com ,因此 https://example.com/page1https://example.com/page2 等),那么您可以使用 cookie 或本地存储来跟踪值。

您无法使用本地存储或 cookie 轻松跟踪功能。

Cookie 和本地存储不可跨域使用。

我会使用本地存储,因为这样更容易连接。所以代替:

var someVar = 'hello';

localStorage['someVar'] = 'hello';

然后使用变量:

console.log(localStorage['someVar']);

本地存储的最大大小为 10MB。对于任何自动化脚本来说可能足够了。

如果您想在页面重新加载时保留功能,您应该使用类似 grease monkey 的内容。存储您的用户脚本。

关于javascript - 使用 JS 更改网站时如何保留范围或携带变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56222358/

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