Skip to content

Commit 1b6883c

Browse files
committed
split logic in screenshot method
1 parent 6a7d7f5 commit 1b6883c

File tree

1 file changed

+33
-10
lines changed

1 file changed

+33
-10
lines changed

runner/headless.go

Lines changed: 33 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -111,10 +111,26 @@ func NewBrowser(proxy string, useLocal bool, optionalArgs map[string]string) (*B
111111
}
112112

113113
func (b *Browser) ScreenshotWithBody(url string, timeout time.Duration, idle time.Duration, headers []string, fullPage bool, jsCodes []string) ([]byte, string, []NetworkRequest, error) {
114-
page, err := b.engine.Page(proto.TargetCreateTarget{})
114+
page, networkRequests, err := b.setupPageAndNavigate(url, timeout, headers, jsCodes)
115115
if err != nil {
116116
return nil, "", []NetworkRequest{}, err
117117
}
118+
defer b.closePage(page)
119+
120+
screenshot, body, err := b.takeScreenshotAndGetBody(page, idle, fullPage)
121+
if err != nil {
122+
return nil, "", networkRequests, err
123+
}
124+
125+
return screenshot, body, networkRequests, nil
126+
}
127+
128+
// setupPageAndNavigate opens a page, performs all adaptive actions including JS injection
129+
func (b *Browser) setupPageAndNavigate(url string, timeout time.Duration, headers []string, jsCodes []string) (*rod.Page, []NetworkRequest, error) {
130+
page, err := b.engine.Page(proto.TargetCreateTarget{})
131+
if err != nil {
132+
return nil, []NetworkRequest{}, err
133+
}
118134

119135
// Enable network
120136
page.EnableDomain(proto.NetworkEnable{})
@@ -184,39 +200,46 @@ func (b *Browser) ScreenshotWithBody(url string, timeout time.Duration, idle tim
184200
}
185201

186202
page = page.Timeout(timeout)
187-
defer func() {
188-
_ = page.Close()
189-
}()
190203

191204
if err := page.Navigate(url); err != nil {
192-
return nil, "", networkRequests.Slice, err
205+
return page, networkRequests.Slice, err
193206
}
194207

195208
if len(jsCodes) > 0 {
196209
_, err := b.ExecuteJavascriptCodesWithPage(page, jsCodes)
197210
if err != nil {
198-
return nil, "", networkRequests.Slice, err
211+
return page, networkRequests.Slice, err
199212
}
200213
}
201214

202215
page.Timeout(5 * time.Second).WaitNavigation(proto.PageLifecycleEventNameFirstMeaningfulPaint)()
203216

217+
return page, networkRequests.Slice, nil
218+
}
219+
220+
// takeScreenshotAndGetBody performs the screenshot actions
221+
func (b *Browser) takeScreenshotAndGetBody(page *rod.Page, idle time.Duration, fullPage bool) ([]byte, string, error) {
204222
if err := page.WaitLoad(); err != nil {
205-
return nil, "", networkRequests.Slice, err
223+
return nil, "", err
206224
}
207225
_ = page.WaitIdle(idle)
208226

209227
screenshot, err := page.Screenshot(fullPage, &proto.PageCaptureScreenshot{})
210228
if err != nil {
211-
return nil, "", networkRequests.Slice, err
229+
return nil, "", err
212230
}
213231

214232
body, err := page.HTML()
215233
if err != nil {
216-
return screenshot, "", networkRequests.Slice, err
234+
return screenshot, "", err
217235
}
218236

219-
return screenshot, body, networkRequests.Slice, nil
237+
return screenshot, body, nil
238+
}
239+
240+
// closePage closes the page and performs cleanup
241+
func (b *Browser) closePage(page *rod.Page) {
242+
_ = page.Close()
220243
}
221244

222245
func (b *Browser) Close() {

0 commit comments

Comments
 (0)