Skip to content

Instantly share code, notes, and snippets.

@nulltask
Last active August 29, 2015 14:10
Show Gist options
  • Select an option

  • Save nulltask/ada65ce77f3cac32df8b to your computer and use it in GitHub Desktop.

Select an option

Save nulltask/ada65ce77f3cac32df8b to your computer and use it in GitHub Desktop.
<!doctype html>
<html>
<body>
<form name="open">
<input type="text" name="id" placeholder="id"> <input type="submit" value="open">
</form>
<form name="close">
<input type="text" name="id" placeholder="id"> <input type="submit" value="close">
</form>
<script src="/socket.io/socket.io.js"></script>
<script>
function q(n) {
return document.querySelector(n);
}
var socket = io();
var open = q('form[name=open]');
var openId = q('[name=open] input[name=id]');
var close = q('form[name=close]');
var closeId = q('[name=close] input[name=id]');
[open, close].forEach(function(el) {
el.addEventListener('submit', function(e) {
var id = e.target.querySelector('[name=id]').value;
if (id) socket.emit((el == open ? 'open' : 'close') + ' browser', id);
e.preventDefault();
}, false);
});
</script>
</body>
</html>
var app = require('express')();
var server = require('http').Server(app);
var io = require('socket.io')(server);
var webdriver = require('selenium-webdriver');
var port = process.env.PORT || 3333;
var drivers = {};
server.listen(port);
app.get('/', function(req, res) {
res.sendfile(__dirname + '/index.html');
});
app.get('/n', function(req, res) {
res.send({ n: Object.keys(drivers).length });
});
app.get('/:id', function(req, res) {
res.send('capturing stream ' + req.params.id);
});
io.on('connection', function(socket) {
socket.on('open browser', function(id) {
if (drivers[id]) return console.warn('driver %s is already running.');
var driver = drivers[id] = new webdriver.Builder()
.withCapabilities(webdriver.Capabilities.firefox())
.build();
console.log('opening firefox. id = %s', id);
driver.get('http://0.0.0.0:' + port + '/' + id);
});
socket.on('close browser', function(id) {
var driver = drivers[id];
if (!driver) return console.warn('driver %s is not running.', id);
console.log('closing firefox. id = %s', id);
driver.quit();
delete drivers[id];
});
});
#!/bin/sh
# install dependencies.
sudo yum install -y xorg-x11-server-Xvfb
sudo yum install -y firefox
sudo rpm --import http://dag.wieers.com/rpm/packages/RPM-GPG-KEY.dag.txt
sudo yum localinstall -y http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.3-1.el7.rf.x86_64.rpm
sudo yum install -y x11vnc --enablerepo=rpmforge
# boot X virtual frame buffer and vnc server
Xvfb :1 -screen 0 1024x768x24 -nolisten tcp &
x11vnc -listen 0.0.0.0 -rfbport 5900 -noipv6 -passwd password -display :1 -forever &
echo 'export DISPLAY=:1' >> ~/.bashrc
# install node.js
curl -O http://nodejs.org/dist/v0.10.33/node-v0.10.33-linux-x64.tar.gz
tar zxvf node-v0.10.33-linux-x64.tar.gz
echo 'export PATH=$HOME/node-v0.10.33-linux-x64/bin:$PATH' >> ~/.bashrc
source ~/.bashrc
npm -g install forever
forever start ~/remote-firefox/index.js
# DISPLAY=:1 firefox &
{
"private": true,
"dependencies": {
"express": "^4.10.4",
"selenium-webdriver": "^2.44.0",
"socket.io": "^1.2.1"
},
"scripts": {
"start": "node index"
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment