从html/js返回数据到python
我有一个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”里 :)