【问题标题】:Use javascript to send mouse coordinates to other program使用 javascript 将鼠标坐标发送到其他程序
【发布时间】:2018-08-23 09:04:50
【问题描述】:

我已经编写了一个简短的扩展程序,可以在 Chrome 中捕获我的鼠标移动,并且我想在 Javascript 捕获它们后立即在 Python 中使用这些坐标,请参阅下面的内容文件中的简短 Javascript 代码:

var actualCode = `
document.onmousemove = function(e){
  var pageCoords = "( " + e.pageX + ", " + e.pageY + " )";
  console.log(pageCoords);
};
`;

var script = document.createElement('script');
script.textContent = actualCode;
(document.head||document.documentElement).appendChild(script);
script.remove();

目前 Javascript 只是在控制台中打印它们,我正在考虑打印到一个文本文件,然后让 python 读取它,但这似乎是一个充满潜在问题的非常缓慢的过程。

有没有更好的方法将数据从由 javascript 扩展生成的 Chrome 浏览器传输到 Python 脚本?

编辑:这与 How to send data from JavaScript to Python 不同,因为它专注于 Web 开发,这里两个脚本都在我的本地机器上运行。

【问题讨论】:

  • 您会遇到麻烦,因为将客户端数据发送到服务器不是即时操作。并且看到您的目标是在每次鼠标移动时都发送此信息,您希望每分每秒都发出两位数的请求。 mousemove 的触发速度比 Teddy Flood 快。通过鼠标交互和笛卡尔坐标平面操作东西是客户端的工作,这是有原因的。我建议只在鼠标移动结束时这样做。
  • 我不知道 chrome 扩展的细节,但是,为了能够在 python(和任何其他语言)中“监听”来自“某处”的数据,你基本上需要一个网络侦听连接并将数据传递给 python 代码的服务器。作为一个简单的开始,在 Python 中,我推荐烧瓶框架 (flask.pocoo.org)。您似乎在该领域没有太多经验,但基本上,您必须: 1) 让您的 chrome 扩展程序与您的 Web 服务器通信; 2)让你在服务器上的python代码对数据做一些事情,并可选择返回一个响应
  • 另外我建议不要在每次鼠标运动时都发送数据,而是将坐标添加到 json 中,然后每 x 次或 x 次运动发送一次。
  • 因为两者都在我的本地机器上运行,所以不能直接发送信息吗?似乎需要很长时间才能首先将其发送到服务器,然后让 python 抓取它

标签: javascript python google-chrome


【解决方案1】:

我不是 Python 开发人员,但我可以帮助您了解如何使用它。

理论上,您可以向本地(或远程)Python 服务器发出 POST HTTP 请求,该服务器将每 x 秒获取一次鼠标数据。

如何用JS做客户端的例子(因为我不知道如何用Python做服务器部分):

let pageCoords = [];
let isNewDataCaptured = false;

// make a request every 1s
setInterval(() => {
    // checks if the browser captured new mouse data
    if (isNewDataCaptured) {
        // create a new vanilla XHR request but can be simplified
        // with the Axios package.
        const XHR = new XMLHttpRequest();

        // listener for the request completion
        // resets everything after the data was sent to the Python server
        XHR.addEventListener( 'load', () => {
            isNewDataCaptured = false;
            pageCoords = []
        });

        // the server URL and port is an example,
        // you can replace them with whatever suits you the most
        XHR.open('POST', 'http://localhost:3000')
        XHR.send(JSON.stringify(pageCoords))
    }
}, 1000)

document.onmousemove = (e) => {
  isNewDataCaptured = true;
  pageCoords.push({
     x: e.pageX,
     y: e.pageY
  })
};

你现在要做的就是想办法在你的 Python 服务器上获取这些数据,并通过 Python 将它们保存为一个数组或任何你喜欢用它们做的事情。 :D

【讨论】:

    猜你喜欢
    • 2019-03-08
    • 2012-05-31
    • 1970-01-01
    • 2011-07-19
    • 1970-01-01
    • 2013-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多