create temp dir for user profile rather than rely on --temp-profile

This commit is contained in:
Noah Levitt 2014-02-14 19:45:16 -08:00
parent b4846e1063
commit b96d8856d4

View file

@ -12,6 +12,7 @@ import threading
import subprocess import subprocess
import signal import signal
from kombu import Connection, Exchange, Queue from kombu import Connection, Exchange, Queue
import tempfile
class UmbraWorker: class UmbraWorker:
logger = logging.getLogger('umbra.UmbraWorker') logger = logging.getLogger('umbra.UmbraWorker')
@ -31,19 +32,20 @@ class UmbraWorker:
with self.lock: with self.lock:
self.url = url self.url = url
self.url_metadata = url_metadata self.url_metadata = url_metadata
with Chrome(self.chrome_port, self.chrome_exe, self.chrome_wait) as websocket_url: with tempfile.TemporaryDirectory() as user_data_dir:
websock = websocket.WebSocketApp(websocket_url, with Chrome(self.chrome_port, self.chrome_exe, self.chrome_wait, user_data_dir) as websocket_url:
on_open=self.visit_page, on_message=self.handle_message) websock = websocket.WebSocketApp(websocket_url,
websock_thread = threading.Thread(target=websock.run_forever) on_open=self.visit_page, on_message=self.handle_message)
websock_thread.start() websock_thread = threading.Thread(target=websock.run_forever)
websock_thread.start()
self.page_done.clear() self.page_done.clear()
self._reset_idle_timer() self._reset_idle_timer()
while not self.page_done.is_set(): while not self.page_done.is_set():
time.sleep(0.5) time.sleep(0.5)
websock.close() websock.close()
self.idle_timer = None self.idle_timer = None
def _reset_idle_timer(self): def _reset_idle_timer(self):
if self.idle_timer: if self.idle_timer:
@ -83,7 +85,7 @@ class UmbraWorker:
elif "method" in message.keys() and message["method"] == "Page.loadEventFired": elif "method" in message.keys() and message["method"] == "Page.loadEventFired":
self.logger.debug("got Page.loadEventFired, starting behaviors for {}".format(self.url)) self.logger.debug("got Page.loadEventFired, starting behaviors for {}".format(self.url))
from umbra import behaviors from umbra import behaviors
behaviors.execute(self.url, websock, self.command_id) behaviors.execute(self.url, websock, self.command_id)
def get_message_handler(self, url, url_metadata, command_id): def get_message_handler(self, url, url_metadata, command_id):
this_watchdog = self.watchdog(command_id) this_watchdog = self.watchdog(command_id)
@ -159,10 +161,11 @@ class Umbra:
class Chrome: class Chrome:
logger = logging.getLogger('umbra.Chrome') logger = logging.getLogger('umbra.Chrome')
def __init__(self, port, executable, browser_wait): def __init__(self, port, executable, browser_wait, user_data_dir):
self.port = port self.port = port
self.executable = executable self.executable = executable
self.browser_wait = browser_wait self.browser_wait = browser_wait
self.user_data_dir = user_data_dir
def fetch_debugging_json(): def fetch_debugging_json():
raw_json = urllib.request.urlopen("http://localhost:%s/json" % self.port).read() raw_json = urllib.request.urlopen("http://localhost:%s/json" % self.port).read()
@ -171,7 +174,8 @@ class Chrome:
# returns websocket url to chrome window with about:blank loaded # returns websocket url to chrome window with about:blank loaded
def __enter__(self): def __enter__(self):
chrome_args = [self.executable, "--temp-profile", chrome_args = [self.executable,
"--user-data-dir={}".format(self.user_data_dir),
"--remote-debugging-port=%s" % self.port, "--remote-debugging-port=%s" % self.port,
"--disable-web-sockets", "--disable-cache", "--disable-web-sockets", "--disable-cache",
"--window-size=1100,900", "--enable-logging", "--window-size=1100,900", "--enable-logging",