mirror of
https://github.com/internetarchive/brozzler.git
synced 2025-04-20 23:56:34 -04:00
browser.py - Check for open ports before starting Chrome. Open next available on conflict
This commit is contained in:
parent
053767d393
commit
8e84465ff9
@ -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)
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user