我想有一个浏览器的屏幕截图是如何看起来像一个错误(上下文截止日期超过)发生时(最好是在无头和头部模式)。我将chromedp.Screenshot(...)添加到chromedp.Run流程中,当运行通过时,它会正确地截取屏幕截图,但是当它失败时,错误会在屏幕截图步骤之前发生,并导致浏览器关闭,因此无法捕获屏幕截图。谢谢!
uajslkp61#
解决方法是利用屏幕播放功能,并在出现问题时保存最后一帧(或几帧):
package mainimport ( "context" "encoding/base64" "fmt" "os" "github.com/chromedp/cdproto/page" "github.com/chromedp/chromedp")func main() { ctx, cancel := chromedp.NewContext(context.Background()) defer cancel() var screenshot string chromedp.ListenTarget(ctx, func(ev interface{}) { if ev, ok := ev.(*page.EventScreencastFrame); ok { // Only keep the last frame. // You can modify the code to keep several frames or all the frames. screenshot = ev.Data go func() { _ = chromedp.Run(ctx, page.ScreencastFrameAck(ev.SessionID)) }() } }) if err := chromedp.Run(ctx, page.StartScreencast(), // Put your actions here. page.StopScreencast(), ); err != nil { if screenshot != "" { buf, err := base64.StdEncoding.DecodeString(screenshot) if err != nil { fmt.Printf("failed to decode the screenshot data: %v\n", err) } else { _ = os.WriteFile("screenshot.png", buf, 0o644) } } panic(err) }}
package main
import (
"context"
"encoding/base64"
"fmt"
"os"
"github.com/chromedp/cdproto/page"
"github.com/chromedp/chromedp"
)
func main() {
ctx, cancel := chromedp.NewContext(context.Background())
defer cancel()
var screenshot string
chromedp.ListenTarget(ctx, func(ev interface{}) {
if ev, ok := ev.(*page.EventScreencastFrame); ok {
// Only keep the last frame.
// You can modify the code to keep several frames or all the frames.
screenshot = ev.Data
go func() {
_ = chromedp.Run(ctx, page.ScreencastFrameAck(ev.SessionID))
}()
}
})
if err := chromedp.Run(ctx,
page.StartScreencast(),
// Put your actions here.
page.StopScreencast(),
); err != nil {
if screenshot != "" {
buf, err := base64.StdEncoding.DecodeString(screenshot)
if err != nil {
fmt.Printf("failed to decode the screenshot data: %v\n", err)
} else {
_ = os.WriteFile("screenshot.png", buf, 0o644)
panic(err)
字符集
1条答案
按热度按时间uajslkp61#
解决方法是利用屏幕播放功能,并在出现问题时保存最后一帧(或几帧):
字符集