kopia lustrzana https://github.com/dgtlmoon/changedetection.io
Browser Steps - General error handling improvements (#2083)
rodzic
126852b778
commit
e051b29bf2
|
@ -43,9 +43,11 @@ class JSActionExceptions(Exception):
|
||||||
return
|
return
|
||||||
|
|
||||||
|
|
||||||
class BrowserStepsStepTimout(Exception):
|
class BrowserStepsStepException(Exception):
|
||||||
def __init__(self, step_n):
|
def __init__(self, step_n, original_e):
|
||||||
self.step_n = step_n
|
self.step_n = step_n
|
||||||
|
self.original_e = original_e
|
||||||
|
print(f"Browser Steps exception at step {self.step_n}", str(original_e))
|
||||||
return
|
return
|
||||||
|
|
||||||
|
|
||||||
|
@ -173,7 +175,7 @@ class Fetcher():
|
||||||
|
|
||||||
def iterate_browser_steps(self):
|
def iterate_browser_steps(self):
|
||||||
from changedetectionio.blueprint.browser_steps.browser_steps import steppable_browser_interface
|
from changedetectionio.blueprint.browser_steps.browser_steps import steppable_browser_interface
|
||||||
from playwright._impl._errors import TimeoutError
|
from playwright._impl._errors import TimeoutError, Error
|
||||||
from jinja2 import Environment
|
from jinja2 import Environment
|
||||||
jinja2_env = Environment(extensions=['jinja2_time.TimeExtension'])
|
jinja2_env = Environment(extensions=['jinja2_time.TimeExtension'])
|
||||||
|
|
||||||
|
@ -203,10 +205,10 @@ class Fetcher():
|
||||||
optional_value=optional_value)
|
optional_value=optional_value)
|
||||||
self.screenshot_step(step_n)
|
self.screenshot_step(step_n)
|
||||||
self.save_step_html(step_n)
|
self.save_step_html(step_n)
|
||||||
except TimeoutError as e:
|
|
||||||
print(str(e))
|
except (Error, TimeoutError) as e:
|
||||||
# Stop processing here
|
# Stop processing here
|
||||||
raise BrowserStepsStepTimout(step_n=step_n)
|
raise BrowserStepsStepException(step_n=step_n, original_e=e)
|
||||||
|
|
||||||
# It's always good to reset these
|
# It's always good to reset these
|
||||||
def delete_browser_steps_screenshots(self):
|
def delete_browser_steps_screenshots(self):
|
||||||
|
|
|
@ -354,20 +354,32 @@ class update_worker(threading.Thread):
|
||||||
changed_detected = False
|
changed_detected = False
|
||||||
self.datastore.update_watch(uuid=uuid, update_obj={'last_error': False})
|
self.datastore.update_watch(uuid=uuid, update_obj={'last_error': False})
|
||||||
|
|
||||||
except content_fetcher.BrowserStepsStepTimout as e:
|
except content_fetcher.BrowserStepsStepException as e:
|
||||||
|
|
||||||
if not self.datastore.data['watching'].get(uuid):
|
if not self.datastore.data['watching'].get(uuid):
|
||||||
continue
|
continue
|
||||||
|
|
||||||
error_step = e.step_n + 1
|
error_step = e.step_n + 1
|
||||||
err_text = f"Warning, browser step at position {error_step} could not run, target not found, check the watch, add a delay if necessary, view Browser Steps to see screenshot at that step"
|
from playwright._impl._errors import TimeoutError, Error
|
||||||
|
|
||||||
|
# Generally enough info for TimeoutError (couldnt locate the element after default seconds)
|
||||||
|
err_text = f"Browser step at position {error_step} could not run, check the watch, add a delay if necessary, view Browser Steps to see screenshot at that step."
|
||||||
|
|
||||||
|
if e.original_e.name == "TimeoutError":
|
||||||
|
# Just the first line is enough, the rest is the stack trace
|
||||||
|
err_text += " Could not find the target."
|
||||||
|
else:
|
||||||
|
# Other Error, more info is good.
|
||||||
|
err_text += " " + str(e.original_e).splitlines()[0]
|
||||||
|
|
||||||
|
print(f"BrowserSteps exception at step {error_step}", str(e.original_e))
|
||||||
|
|
||||||
self.datastore.update_watch(uuid=uuid,
|
self.datastore.update_watch(uuid=uuid,
|
||||||
update_obj={'last_error': err_text,
|
update_obj={'last_error': err_text,
|
||||||
'browser_steps_last_error_step': error_step
|
'browser_steps_last_error_step': error_step
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
if self.datastore.data['watching'][uuid].get('filter_failure_notification_send', False):
|
if self.datastore.data['watching'][uuid].get('filter_failure_notification_send', False):
|
||||||
c = self.datastore.data['watching'][uuid].get('consecutive_filter_failures', 5)
|
c = self.datastore.data['watching'][uuid].get('consecutive_filter_failures', 5)
|
||||||
c += 1
|
c += 1
|
||||||
|
|
Ładowanie…
Reference in New Issue