実現したいこと
golangのchromedpについて質問させてください。
chromedp.Runの中で、WaitVisibleなどで何か要素を待っている場合、
指定時間が経過しても待っている要素が表示されない場合に、
タイムアウトして、chromedp.Runの処理を抜け、その先の処理が進むようにしたいです。
発生している問題・分からないこと
何も考えず一生現れない要素を指定するとWaitVisibleで永遠待たれる事になります・・・
(厳密には何分かすればタイムアウトする??)
そこでタイムアウト機能をもたせようと、context.WithTimeoutを使ってみたのですが、
処理が正常に進んでもしなくても、指定時間でブラウザ全体が終了してしまいます。。
ブラウザは終了させず、残したままにしておきたいのです。
該当のソースコード
go
1package main 2 3import ( 4 "context" 5 "fmt" 6 "log" 7 "time" 8 9 "github.com/chromedp/chromedp" 10) 11 12func main() { 13 // ブラウザ起動オプションの設定 14 opts := append(chromedp.DefaultExecAllocatorOptions[:], 15 chromedp.Flag("headless", false), // ヘッドレスモードを解除 16 ) 17 18 allocCtx, cancel := chromedp.NewExecAllocator(context.Background(), opts...) 19 defer cancel() 20 21 ctx, cancel := chromedp.NewContext(allocCtx) 22 defer cancel() 23 24 // タイムアウトを設定 25 ctx, cancel := context.WithTimeout(ctx, 7*time.Second) 26 defer cancel() 27 28 // タスクの実行 29 var res string 30 err := chromedp.Run(ctx, 31 chromedp.Navigate("https://www.yahoo.co.jp/"), // Yahooのページを開く 32 chromedp.Title(&res), // ページタイトルを取得 33 chromedp.WaitVisible("#hoge"), // 出てこないであろう要素を待ってみる 34 ) 35 if err != nil { 36 // ここでタイムアウトを検知して何かの処理をする。 37 // ブラウザは終了させたくない。 38 fmt.Printf("エラーがでた: %s\n", err.Error()) 39 } 40 41 log.Printf("Page Title: %s", res) 42 43 fmt.Println("ブラウザは開いたままです。Enterキーを押して終了してください...") 44 fmt.Scanln() // ユーザーがEnterを押すまで待機 45}
試したこと・調べたこと
- teratailやGoogle等で検索した
- ソースコードを自分なりに変更した
- 知人に聞いた
- その他
上記の詳細・結果
調べてはみたのですが、解決ができませんでした・・・
自分が欲しい情報にたどり着けなかったです。。
補足
特になし

回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2025/01/31 14:19