【问题标题】:Return data from html/js to python将数据从 html/js 返回到 python
【发布时间】:2013-01-24 13:11:00
【问题描述】:

我有一个由 javascript 函数填充的 html 表单。我有另一个 javascript 函数,它获取所有表单元素的值,目前只使用警报将它们显示给用户。 html页面通过python显示,代码如下:

import webbrowser
new = 2 #open new tab if possible
url = "form.html"
webbrowser.open(url, new=new)

这一切都很好,但不是使用警报显示数据,我想将数据传递回 python,但不知道如何。所有的数据都存储在一个javascript数组中,所以我基本上只需要传递这一条数据。

编辑:我不能使用任何外部库。

【问题讨论】:

标签: javascript python python-webbrowser


【解决方案1】:
>>> import json
>>> weird_json = '{"x": 1, "x": 2, "x": 3}'
>>> x = json.loads(weird_json)
>>> x
{u'x': 3}
>>> y = json.loads('["foo", {"bar":["baz", null, 1.0, 2]}]')
>>> y
[u'foo', {u'bar': [u'baz', None, 1.0, 2]}]

您可以获取 HTML 数据,并将其转换为字典,从而使您能够: print x['x']

这是起点,在 Python 中创建一个侦听端口的套接字。 然后让它接收数据。

在 Javascript 中,打开一个可以连接到端口(Python 侦听的端口)的套接字。 使用,比如说:http://socket.io/

这是一个纯粹的套接字到套接字相关的问题吗?


Python 和 Javascript 之间的工作关系(端口 80):

from socket import *
import json
s = socket()
s.bind(('', 80))
s.listen(4)
ns, na = s.accept()

while 1:
    try:
        data = ns.recv(8192)
    except:
        ns.close()
        s.close()
        break

    data = json.loads(data)
    print data

你有一个监听 80 的套接字,连接到它并发送你想要的任何内容。

function callPython()
{
var xmlhttp;
if (window.XMLHttpRequest)
  {// code for IE7+, Firefox, Chrome, Opera, Safari
  xmlhttp=new XMLHttpRequest();
  }
else
  {// code for IE6, IE5
  xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
  }
xmlhttp.onreadystatechange=function()
  {
  if (xmlhttp.readyState==4 && xmlhttp.status==200)
    {
    document.getElementById("myDiv").innerHTML=xmlhttp.responseText;
    }
  }
xmlhttp.open("GET","Form-data",true);
xmlhttp.send();
}

例如,您可以将表单数据作为字符串发送,替换“Form-data”,Python 的响应可以放入“myDiv”:)

【讨论】:

  • 他不想使用JSON,他想知道如何让webbrowser中运行的javascript与python脚本通信
  • Myt 点仍然有效,jason.loads 可以照原样获取 JavaScript 数组并将其转换为工作 Python 列表(“数组”)。
  • 数据存储在javascript中,而不是html中。所以我现在的问题是从javascript(以任何形式)获取数据。一旦我将 javascript 数组放入 python 中,这将很有帮助,谢谢。编辑:刚刚看到您已添加到您的答案中,我会尝试一下
  • 只是 AJAX?它每天都在完成,您可以使用 AJAX 以您喜欢的任何形式将数据发送回 Python。 :)
【解决方案2】:

Ghost.py 之类的东西应该可以做你想做的事。

这允许对 JavaScript 进行评估。

result, resources = ghost.evaluate(
    "document.getElementById('my-input').getAttribute('value');")

这应该有帮助。

我使用了PhantomJS JS 无头 webkit 浏览器,这是一个使用 Python 的移植和/或改造。


在我的用例中,我只是从subprocess.call 调用PhantomJS,因为我懒得安装Ghost 依赖项。

我刚刚将 JSon 发送到 stdoutjson.loads 就可以了。

【讨论】:

  • 啊抱歉,我应该添加到我的 OP 中,我不能使用任何外部库:(
  • 嗯,这是一个 问题 - 据我所知,没有什么可以真正以你想要的方式运行 javascript - 因为在你的情况下,javascript 是客户端通常由浏览器完成的处理。听起来你需要以某种方式驱动一个合适的浏览器,这就是 PhantomJS 给你的。我希望别人有一个非常狡猾的方法来解决你的问题。
猜你喜欢
  • 1970-01-01
  • 2018-03-09
  • 2012-11-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多