我想远程管理用户打开的浏览器窗口,以便支持我的网站上的用户。我通过套接字传输点击和键盘事件来模拟一些事件,但由于浏览器
我想远程管理用户打开的浏览器窗口,以便支持我的网站上的用户。
我通过套接字传输点击和键盘事件模拟了一些事件,但由于浏览器策略,我无法访问所有事件。例如,当我想打开颜色选择器时,我收到了一条警告消息。
function triggerClickEvent(clickPosition) {
var { x, y } = clickPosition;
if (!window.clickEvent) {
window.clickEvent = new MouseEvent('click', {
view: window,
bubbles: true,
button: 1,
cancelable: true,
clientX: x,
clientY: y
});
} else {
window.clickEvent.clientX = x;
window.clickEvent.clientY = y;
}
document.elementFromPoint(x, y).dispatchEvent(clickEvent);
clickEvent.target.blur();
clickEvent.target.focus();
clickEvent.target.click();
}
function triggerKeyPressEvent(keyPress) {
var keyPressEvent = new KeyboardEvent('keydown', { 'key': keyPress.key });
document.dispatchEvent(keyPressEvent);
}
如何通过获取相关的用户权限来解决这些问题?
我猜 lines[i].StartsWith(taskId)
永远不会返回 true。可能是因为您的 ID 包含在标签中,即 <42>
调试器 应该很容易找到 .
UpdateCompletedTask
。它是否到达?
taskId
符合预期吗 lines
?
lines[i].Replace("in progress", "completed")
了?
虽然只要付出足够的努力,你就能让这样的事情顺利进行,但你的代码中还是存在很多问题。尤其是你 对字符串的依赖 ,这很容易隐藏一些问题,如果使用了正确的类型,编译器就可以发现这些问题。
正如其他人提到的,有更好的方法来做事:
使用网络流进行通信比较 困难 ,请参阅 Stephen clearys 的 TCP FAQ 了解所有需要做的事情。尤其是有关消息框架的部分。
但幸运的是,您不需要自己做这件事。有各种各样的高级协议和使用这些协议的库。而且这些协议往往更容易使用,因为您可以发送 消息 或 对象 ,而不仅仅是字节流。基于请求-响应的协议(如 http 或 gRPC)听起来最适合您的用例。
虽然纯文本/csv 文件有时可以用作 erzats 数据库,但从长远来看,使用真正的数据库可能会节省您的时间和精力。
有免费的全功能数据库,如 postgres,或流程稍微简单的数据库,如 SQLite 。无论哪种情况,通常使用对象关系映射器 (ORM) 来为您在数据库行和对象之间进行转换。 实体框架 (EF) 可能是最受欢迎的选择。
我个人会将其作为 ASP.Net webapi 项目 (即 http)来执行,并通过 EF 访问 SQLite 后端。应该有大量关于如何进行设置的教程和其他资源。