browser.py - Check for open ports before starting Chrome. Open next available on conflict

This commit is contained in:
Adam Miller 2016-05-05 22:31:07 +00:00
parent 053767d393
commit 8e84465ff9

View File

@ -34,6 +34,7 @@ from requests.structures import CaseInsensitiveDict
import select
import re
import base64
import psutil
__all__ = ["BrowserPool", "Browser"]
@ -127,6 +128,7 @@ class Browser:
def start(self, proxy=None):
if not self._chrome_instance:
# these can raise exceptions
self.chrome_port = self._find_available_port()
self._work_dir = tempfile.TemporaryDirectory()
self._chrome_instance = Chrome(port=self.chrome_port,
executable=self.chrome_exe,
@ -151,6 +153,19 @@ class Browser:
except:
self.logger.error("problem stopping", exc_info=True)
def _find_available_port(self):
port_available = False
port = self.chrome_port
while not port_available:
for connection in psutil.net_connections(kind='tcp'):
if connection.laddr[1] == port:
self.logger.warn("Port already open %s", port)
port_available = False
port += 1
break
port_available = True
return port
def is_running(self):
return bool(self._websocket_url)