diff --git a/examples/multi_tabs_navigate.py b/examples/multi_tabs_navigate.py index 6c968fd..63e84f4 100644 --- a/examples/multi_tabs_navigate.py +++ b/examples/multi_tabs_navigate.py @@ -49,10 +49,10 @@ def frame_stopped_loading(self, frameId): def close_all_tabs(browser): - if len(browser.list_tab()) == 0: + if len(browser.list_tab()) <= 1: return - for tab in browser.list_tab(): + for tab in browser.list_tab()[1:]: try: tab.stop() except pychrome.RuntimeException: @@ -61,7 +61,7 @@ def close_all_tabs(browser): browser.close_tab(tab) time.sleep(1) - assert len(browser.list_tab()) == 0 + assert len(browser.list_tab()) == 1 def main(): @@ -82,7 +82,7 @@ def main(): tab.start() tab.Page.stopLoading() tab.Page.enable() - tab.Network.setRequestInterceptionEnabled(enabled=True) + tab.Network.setRequestInterception(patterns=[{ 'urlPattern': '*' }]) tab.Page.navigate(url="http://httpbin.org/post") for tab in tabs: diff --git a/examples/multi_tabs_pdf.py b/examples/multi_tabs_pdf.py index cc54727..75f0365 100644 --- a/examples/multi_tabs_pdf.py +++ b/examples/multi_tabs_pdf.py @@ -46,10 +46,10 @@ def frame_stopped_loading(self, frameId): def close_all_tabs(browser): - if len(browser.list_tab()) == 0: + if len(browser.list_tab()) <= 1: return - for tab in browser.list_tab(): + for tab in browser.list_tab()[1:]: try: tab.stop() except pychrome.RuntimeException: diff --git a/examples/multi_tabs_screenshot.py b/examples/multi_tabs_screenshot.py index 6bff5aa..8c1a452 100644 --- a/examples/multi_tabs_screenshot.py +++ b/examples/multi_tabs_screenshot.py @@ -44,10 +44,10 @@ def frame_stopped_loading(self, frameId): def close_all_tabs(browser): - if len(browser.list_tab()) == 0: + if len(browser.list_tab()) <= 1: return - for tab in browser.list_tab(): + for tab in browser.list_tab()[1:]: try: tab.stop() except pychrome.RuntimeException: @@ -56,7 +56,7 @@ def close_all_tabs(browser): browser.close_tab(tab) time.sleep(1) - assert len(browser.list_tab()) == 0 + assert len(browser.list_tab()) == 1 def main(): diff --git a/examples/post_request.py b/examples/post_request.py index bbf952e..1b30676 100644 --- a/examples/post_request.py +++ b/examples/post_request.py @@ -15,6 +15,7 @@ def do_post(self): event_handler = EventHandler() + event_handler.set_tab(self.tab) event_handler.set_token('asdkflj497564dsklf') event_handler.set_post_data({ 'param1': 'value1', @@ -22,11 +23,9 @@ def do_post(self): }) url_pattern_object = {'urlPattern': '*fate0*'} - self.tab.Network.setRequestInterception(patterns=[url_pattern_object]) - - self.tab.Network.requestIntercepted = event_handler.on_request_intercepted - self.tab.start() + self.tab.Network.requestIntercepted = event_handler.on_request_intercepted + self.tab.Network.setRequestInterception(patterns=[url_pattern_object]) self.tab.Network.enable() self.tab.Page.enable() @@ -43,7 +42,7 @@ class EventHandler(object): def __init__(self): self.tab = None self.token = None - self.is_first_request = False + self.is_first_request = True self.post_data = {} def set_tab(self, t): @@ -75,7 +74,7 @@ def on_request_intercepted(self, **kwargs): 'url': request['url'], 'method': 'POST', 'headers': request['headers'], - 'postData': urllib.urlencode(self.post_data) + 'postData': urllib.parse.urlencode(self.post_data) }) self.tab.Network.continueInterceptedRequest(**new_args) diff --git a/pychrome/tab.py b/pychrome/tab.py index ee398bb..1ea2530 100644 --- a/pychrome/tab.py +++ b/pychrome/tab.py @@ -119,9 +119,14 @@ def _recv_loop(self): try: self._ws.settimeout(1) message_json = self._ws.recv() + if message_json == '': + continue message = json.loads(message_json) except websocket.WebSocketTimeoutException: continue + except json.decoder.JSONDecodeError: # '' and another + logger.error("invalid json", exc_info=True) + return except (websocket.WebSocketException, OSError): if not self._stopped.is_set(): logger.error("websocket exception", exc_info=True) diff --git a/tests/test_browser.py b/tests/test_browser.py index b6e2db8..5191cf3 100644 --- a/tests/test_browser.py +++ b/tests/test_browser.py @@ -9,14 +9,14 @@ def close_all_tabs(browser): - if len(browser.list_tab()) == 0: + if len(browser.list_tab()) <= 1: return - for tab in browser.list_tab(): + for tab in browser.list_tab()[1:]: browser.close_tab(tab) time.sleep(1) - assert len(browser.list_tab()) == 0 + assert len(browser.list_tab()) == 1 def setup_function(function): @@ -38,14 +38,14 @@ def test_chome_version(): def test_browser_list(): browser = pychrome.Browser() tabs = browser.list_tab() - assert len(tabs) == 0 + assert len(tabs) == 1 def test_browser_new(): browser = pychrome.Browser() browser.new_tab() tabs = browser.list_tab() - assert len(tabs) == 1 + assert len(tabs) == 1 + 1 def test_browser_activate_tab(): @@ -62,10 +62,12 @@ def test_browser_tabs_map(): browser = pychrome.Browser() tab = browser.new_tab() + time.sleep(0.5) assert tab in browser.list_tab() assert tab in browser.list_tab() browser.close_tab(tab) + time.sleep(0.5) assert tab not in browser.list_tab() @@ -76,13 +78,13 @@ def test_browser_new_10_tabs(): tabs.append(browser.new_tab()) time.sleep(1) - assert len(browser.list_tab()) == 10 + assert len(browser.list_tab()) == 10 + 1 for tab in tabs: browser.close_tab(tab.id) time.sleep(1) - assert len(browser.list_tab()) == 0 + assert len(browser.list_tab()) == 1 def test_browser_new_100_tabs(): @@ -92,10 +94,10 @@ def test_browser_new_100_tabs(): tabs.append(browser.new_tab()) time.sleep(1) - assert len(browser.list_tab()) == 100 + assert len(browser.list_tab()) == 100 + 1 for tab in tabs: browser.close_tab(tab) time.sleep(1) - assert len(browser.list_tab()) == 0 + assert len(browser.list_tab()) == 1 diff --git a/tests/test_multi_tabs.py b/tests/test_multi_tabs.py index ac0e2f9..22fdb42 100644 --- a/tests/test_multi_tabs.py +++ b/tests/test_multi_tabs.py @@ -11,15 +11,15 @@ def close_all_tabs(browser): - if len(browser.list_tab()) == 0: + if len(browser.list_tab()) <= 1: return logging.debug("[*] recycle") - for tab in browser.list_tab(): + for tab in browser.list_tab()[1:]: browser.close_tab(tab) time.sleep(1) - assert len(browser.list_tab()) == 0 + assert len(browser.list_tab()) == 1 def setup_function(function): @@ -46,7 +46,7 @@ def test_normal_callmethod(): for tab in tabs: tab.start() - result = tab.Page.navigate(url="http://www.fatezero.org") + result = tab.Page.navigate(url="https://github.com/fate0") assert result['frameId'] time.sleep(3) @@ -54,7 +54,7 @@ def test_normal_callmethod(): for tab in tabs: result = tab.Runtime.evaluate(expression="document.domain") assert result['result']['type'] == 'string' - assert result['result']['value'] == 'www.fatezero.org' + assert result['result']['value'] == 'github.com' tab.stop() diff --git a/tests/test_single_tab.py b/tests/test_single_tab.py index 657acfb..b08d886 100644 --- a/tests/test_single_tab.py +++ b/tests/test_single_tab.py @@ -8,15 +8,15 @@ def close_all_tabs(browser): - if len(browser.list_tab()) == 0: + if len(browser.list_tab()) <= 1: return logging.debug("[*] recycle") - for tab in browser.list_tab(): + for tab in browser.list_tab()[1:]: browser.close_tab(tab) time.sleep(1) - assert len(browser.list_tab()) == 0 + assert len(browser.list_tab()) == 1 def setup_function(function): @@ -34,14 +34,14 @@ def test_normal_callmethod(): tab = browser.new_tab() tab.start() - result = tab.Page.navigate(url="http://www.fatezero.org") + result = tab.Page.navigate(url="https://github.com/fate0") assert result['frameId'] time.sleep(1) result = tab.Runtime.evaluate(expression="document.domain") assert result['result']['type'] == 'string' - assert result['result']['value'] == 'www.fatezero.org' + assert result['result']['value'] == 'github.com' tab.stop() @@ -70,19 +70,19 @@ def test_invalid_params(): pass try: - tab.Page.navigate("http://www.fatezero.org") + tab.Page.navigate("https://github.com/fate0") assert False, "never get here" except pychrome.CallMethodException: pass try: - tab.Page.navigate(invalid_params="http://www.fatezero.org") + tab.Page.navigate(invalid_params="https://github.com/fate0") assert False, "never get here" except pychrome.CallMethodException: pass try: - tab.Page.navigate(url="http://www.fatezero.org", invalid_params=123) + tab.Page.navigate(url="https://github.com/fate0", invalid_params=123) except pychrome.CallMethodException: assert False, "never get here" @@ -169,7 +169,7 @@ def request_will_be_sent(**kwargs): assert False, "never get here" try: - tab.Page.navigate(url="http://www.fatezero.org") + tab.Page.navigate(url="https://github.com/fate0") assert False, "never get here" except pychrome.RuntimeException: pass @@ -189,7 +189,7 @@ def request_will_be_sent(**kwargs): tab.Network.requestWillBeSent = request_will_be_sent tab.Network.enable() tab.Page.navigate(url="chrome://newtab/") - tab.Page.navigate(url="http://www.fatezero.org") + tab.Page.navigate(url="https://github.com/fate0") if tab.wait(timeout=5): assert False, "never get here" @@ -282,12 +282,12 @@ def test_call_method_timeout(): tab.Page.navigate(url="chrome://newtab/", _timeout=5) try: - tab.Page.navigate(url="http://www.fatezero.org", _timeout=0.8) + tab.Page.navigate(url="https://github.com/fate0", _timeout=0.8) except pychrome.TimeoutException: pass try: - tab.Page.navigate(url="http://www.fatezero.org", _timeout=0.005) + tab.Page.navigate(url="https://github.com/fate0", _timeout=0.005) except pychrome.TimeoutException: pass