Получение phantomjs, socket.io и gevent-socketio для совместной работы
Я пытаюсь создать приложение, которое использует Phantomjs 1.7 (имитирует браузер) и создать бэкэнд Python для запуска некоторых событий и сбора данных.
Проблема в том, что два процесса, Phantomjs и моя программа на Python, должны взаимодействовать в двух направлениях. Проблема в том, что внутриpage.evaluate
Я не могу:
Поэтому мое решение простое:
Вставьте socket.io js в страницу, которую я просматриваю.Подключитесь к моему серверу python, который реализован с помощью gevent-socketioКогда я пытаюсь подключиться изнутри page.evaluate, я получаю:
Unexpected response code: 404
Вот скрипт Phantomjs:
var page = require("webpage").create();
page.onAlert = function(msg) { console.log("alert>>>" + msg); };
page.onConsoleMessage= function(msg) { console.log(msg); };
page.open("http://google.com", function() {
page.injectJs("socket.io.js");
page.evaluate(function() {
var socket = new io.Socket();
socket.connect('localhost:5051/test');
socket.on('connect',function() {
console.log('Client has connected to the server!');
});
// Add a connect listener
socket.on('signal',function(data) {
console.log('Received a signal: ',data);
});
// Add a disconnect listener
socket.on('disconnect',function() {
console.log('The client has disconnected!');
});
// Sends a message to the server via sockets
socket.send("kakalq");
});
//phantom.exit();
});
А вот серверный скрипт Python:
from socketio import socketio_manage
from socketio.server import SocketIOServer
from socketio.namespace import BaseNamespace
class MyNs(BaseNamespace):
def initialize(self):
print "connected"
self.emit('connect')
def disconnect(self, *args, **kwargs):
print "diconnecting"
super(MyNs, self).disconnect(*args, **kwargs)
def signal(self, message):
print "received signal", message
self.emit("okay", "this will be sent to js")
def start(environ, start_response):
if environ['PATH_INFO'].startswith('/test'):
return socketio_manage(environ, { '/test': MyNs })
if __name__ == "__main__":
server = SocketIOServer( ('', 5051), start,policy_server=False )
server.serve_forever()