diff --git a/pkg/html/dynamic/document.go b/pkg/html/dynamic/document.go
index c248ebc3..34264e80 100644
--- a/pkg/html/dynamic/document.go
+++ b/pkg/html/dynamic/document.go
@@ -50,6 +50,14 @@ const (
ScreenshotFormatJPEG ScreenshotFormat = "jpeg"
)
+func handleLoadError(logger *zerolog.Logger, client *cdp.Client) {
+ err := client.Page.Close(context.Background())
+
+ if err != nil {
+ logger.Warn().Timestamp().Err(err).Msg("unabled to close document on load error")
+ }
+}
+
func IsScreenshotFormatValid(format string) bool {
value := ScreenshotFormat(format)
@@ -62,6 +70,8 @@ func LoadHTMLDocument(
client *cdp.Client,
url string,
) (*HTMLDocument, error) {
+ logger := logging.FromContext(ctx)
+
if conn == nil {
return nil, core.Error(core.ErrMissedArgument, "connection")
}
@@ -76,6 +86,8 @@ func LoadHTMLDocument(
err = waitForLoadEvent(ctx, client)
if err != nil {
+ handleLoadError(logger, client)
+
return nil, err
}
}
@@ -83,17 +95,17 @@ func LoadHTMLDocument(
node, err := getRootElement(ctx, client)
if err != nil {
+ handleLoadError(logger, client)
return nil, errors.Wrap(err, "failed to get root element")
}
broker, err := createEventBroker(client)
if err != nil {
+ handleLoadError(logger, client)
return nil, errors.Wrap(err, "failed to create event events")
}
- logger := logging.FromContext(ctx)
-
rootElement, err := LoadElement(
ctx,
logger,
@@ -104,6 +116,10 @@ func LoadHTMLDocument(
)
if err != nil {
+ broker.Stop()
+ broker.Close()
+ handleLoadError(logger, client)
+
return nil, errors.Wrap(err, "failed to load root element")
}
diff --git a/pkg/html/dynamic/driver.go b/pkg/html/dynamic/driver.go
index 8cb61991..a93cb7fd 100644
--- a/pkg/html/dynamic/driver.go
+++ b/pkg/html/dynamic/driver.go
@@ -129,6 +129,10 @@ func (drv *Driver) GetDocument(ctx context.Context, targetURL values.String) (va
},
)
+ if err != nil {
+ return nil, err
+ }
+
return LoadHTMLDocument(ctx, conn, client, url)
}