从html/js返回数据到python

9 投票
2 回答
8858 浏览
提问于 2025-04-17 15:16

我有一个HTML表单,这个表单是通过JavaScript函数来填充的。我还有另一个JavaScript函数,它可以获取表单中所有元素的值,目前只是用一个提示框(alert)把这些值显示给用户。这个HTML页面是通过Python代码显示的:

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

这一切都运行得很好,但我不想再用提示框来显示数据,而是想把数据传回给Python,但我不知道该怎么做。所有的数据都存储在一个JavaScript数组里,所以我其实只需要把这一部分数据传过去。

补充说明:我不能使用任何外部库。

相关问题:

2 个回答

2

类似于 Ghost.py 的工具应该能满足你的需求。

这个工具可以执行JavaScript代码。

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

这应该会有所帮助。

我用过 PhantomJS,这是一个无头的JavaScript浏览器,Ghost.py其实是用Python对它的一个移植或改造。


在我的使用场景中,我直接通过 subprocess.call 调用了 PhantomJS,因为我懒得去安装 Ghost 的依赖。

我只是把结果以JSON格式输出到 stdout,然后用 json.loads 来处理它。

9
>>> 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中创建一个监听某个端口的socket(插座)。然后让它接收数据。

在JavaScript中,打开一个可以连接到Python监听的端口的socket。可以使用,比如说:http://socket.io/

这完全是一个socket之间的连接问题吗?


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端口上有一个socket在监听,连接到它,然后发送你想要的任何东西。

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”里 :)

撰写回答