Skip to content

Commit ad8969d

Browse files
committed
Updating forecast example
1 parent c1a1975 commit ad8969d

File tree

3 files changed

+38
-22
lines changed

3 files changed

+38
-22
lines changed

forecast/main.go

Lines changed: 29 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -22,12 +22,15 @@ import (
2222

2323
"github.com/chromedp/cdproto/cdp"
2424
"github.com/chromedp/cdproto/dom"
25+
"github.com/chromedp/cdproto/runtime"
2526
"github.com/chromedp/chromedp"
2627
"github.com/kenshaw/rasterm"
2728
"golang.org/x/exp/maps"
2829
)
2930

30-
const dataSel = `div[data-ve-view]`
31+
const hdrSel = `#taw`
32+
33+
const dataSel = `#wob_wc`
3134

3235
const svgSel = `#wob_d svg path`
3336

@@ -67,9 +70,9 @@ func run(ctx context.Context, verbose bool, timeout time.Duration, query, lang,
6770
return fmt.Errorf("invalid unit %q", unit)
6871
}
6972
switch typ = strings.ToLower(typ); typ {
70-
case "temp":
71-
typ = ""
72-
case "", "rain", "wind":
73+
case "":
74+
typ = "temp"
75+
case "temp", "rain", "wind":
7376
default:
7477
return fmt.Errorf("invalid type %q", typ)
7578
}
@@ -104,31 +107,44 @@ func run(ctx context.Context, verbose bool, timeout time.Duration, query, lang,
104107
ctx, cancel = context.WithTimeout(ctx, timeout)
105108
defer cancel()
106109

107-
// get nodes
108-
var nodes []*cdp.Node
110+
// get
111+
var nodes, dataNodes []*cdp.Node
109112
if err := chromedp.Run(ctx,
110113
chromedp.Navigate("https://www.google.com/search?"+v.Encode()),
111-
chromedp.WaitVisible(dataSel, chromedp.ByQuery),
112-
chromedp.WaitVisible(svgSel, chromedp.ByQuery),
113-
chromedp.Nodes(dataSel, &nodes, chromedp.ByQuery, chromedp.NodeVisible),
114+
chromedp.QueryAfter(hdrSel, func(ctx context.Context, id runtime.ExecutionContextID, n ...*cdp.Node) error {
115+
nodes = append(nodes, n[0])
116+
return nil
117+
}, chromedp.ByQuery, chromedp.NodeVisible),
118+
chromedp.QueryAfter(dataSel, func(ctx context.Context, id runtime.ExecutionContextID, n ...*cdp.Node) error {
119+
nodes = append(nodes, n[0])
120+
return nil
121+
}, chromedp.ByQuery, chromedp.NodeVisible),
122+
chromedp.Nodes(dataSel, &dataNodes, chromedp.ByQuery, chromedp.NodeVisible),
114123
chromedp.ActionFunc(func(ctx context.Context) error {
115-
return dom.RequestChildNodes(nodes[0].NodeID).WithDepth(-1).Do(ctx)
124+
return dom.RequestChildNodes(dataNodes[0].NodeID).WithDepth(-1).Do(ctx)
116125
}),
117126
); err != nil {
118127
return err
119128
}
120129

121130
// click on unit
122131
if unit != "" {
123-
if node := findNode(`°`+unit, nodes); node != nil {
132+
if node := findNode(`°`+unit, dataNodes); node != nil {
124133
_ = chromedp.Run(ctx, chromedp.MouseClickNode(node))
125134
}
126135
}
127136

128137
// click on type
129-
if typ != "" {
138+
if typ != "temp" {
130139
_ = chromedp.Run(ctx, chromedp.Click("wob_"+typ, chromedp.ByID))
131140
}
141+
// hide other types
142+
_ = chromedp.Run(ctx, chromedp.QueryAfter(`#wob_d > div:first-child > *:not(#wob_`+typ+`)`, func(ctx context.Context, id runtime.ExecutionContextID, nodes ...*cdp.Node) error {
143+
for _, n := range nodes {
144+
_ = dom.SetAttributeValue(n.NodeID, "style", "display:none;").Do(ctx)
145+
}
146+
return nil
147+
}))
132148

133149
// click on day
134150
if day != 0 {
@@ -137,7 +153,7 @@ func run(ctx context.Context, verbose bool, timeout time.Duration, query, lang,
137153

138154
// capture screenshot
139155
var buf []byte
140-
if err := chromedp.Run(ctx, chromedp.ScreenshotScale(dataSel, scale, &buf, chromedp.ByQuery)); err != nil {
156+
if err := chromedp.Run(ctx, chromedp.ScreenshotNodes(nodes, scale, &buf)); err != nil {
141157
return err
142158
}
143159
// decode png

go.mod

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,8 @@ go 1.21
55
toolchain go1.21.6
66

77
require (
8-
github.com/chromedp/cdproto v0.0.0-20231011050154-1d073bb38998
9-
github.com/chromedp/chromedp v0.9.3
8+
github.com/chromedp/cdproto v0.0.0-20240127002248-bd7a66284627
9+
github.com/chromedp/chromedp v0.9.4
1010
github.com/kenshaw/rasterm v0.1.8
1111
golang.org/x/exp v0.0.0-20240119083558-1b970713d09a
1212
)
@@ -15,7 +15,7 @@ require (
1515
github.com/chromedp/sysutil v1.0.0 // indirect
1616
github.com/gobwas/httphead v0.1.0 // indirect
1717
github.com/gobwas/pool v0.2.1 // indirect
18-
github.com/gobwas/ws v1.3.0 // indirect
18+
github.com/gobwas/ws v1.3.2 // indirect
1919
github.com/josharian/intern v1.0.0 // indirect
2020
github.com/mailru/easyjson v0.7.7 // indirect
2121
github.com/mattn/go-sixel v0.0.5 // indirect

go.sum

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,15 @@
1-
github.com/chromedp/cdproto v0.0.0-20231011050154-1d073bb38998 h1:2zipcnjfFdqAjOQa8otCCh0Lk1M7RBzciy3s80YAKHk=
2-
github.com/chromedp/cdproto v0.0.0-20231011050154-1d073bb38998/go.mod h1:GKljq0VrfU4D5yc+2qA6OVr8pmO/MBbPEWqWQ/oqGEs=
3-
github.com/chromedp/chromedp v0.9.3 h1:Wq58e0dZOdHsxaj9Owmfcf+ibtpYN1N0FWVbaxa/esg=
4-
github.com/chromedp/chromedp v0.9.3/go.mod h1:NipeUkUcuzIdFbBP8eNNvl9upcceOfWzoJn6cRe4ksA=
1+
github.com/chromedp/cdproto v0.0.0-20240127002248-bd7a66284627 h1:L5rJ/yzLfSU3kcjsjq11xYDqAdianisL21CXQ/08Zag=
2+
github.com/chromedp/cdproto v0.0.0-20240127002248-bd7a66284627/go.mod h1:GKljq0VrfU4D5yc+2qA6OVr8pmO/MBbPEWqWQ/oqGEs=
3+
github.com/chromedp/chromedp v0.9.4 h1:HWAQlqLbqvJ6MkHo+e6kNEE18RRr7OBPB/UQjMX2EBA=
4+
github.com/chromedp/chromedp v0.9.4/go.mod h1:6wuMtDoRuOCeYF3gP7E+hxen58OsvlloigZZtHMHERk=
55
github.com/chromedp/sysutil v1.0.0 h1:+ZxhTpfpZlmchB58ih/LBHX52ky7w2VhQVKQMucy3Ic=
66
github.com/chromedp/sysutil v1.0.0/go.mod h1:kgWmDdq8fTzXYcKIBqIYvRRTnYb9aNS9moAV0xufSww=
77
github.com/gobwas/httphead v0.1.0 h1:exrUm0f4YX0L7EBwZHuCF4GDp8aJfVeBrlLQrs6NqWU=
88
github.com/gobwas/httphead v0.1.0/go.mod h1:O/RXo79gxV8G+RqlR/otEwx4Q36zl9rqC5u12GKvMCM=
99
github.com/gobwas/pool v0.2.1 h1:xfeeEhW7pwmX8nuLVlqbzVc7udMDrwetjEv+TZIz1og=
1010
github.com/gobwas/pool v0.2.1/go.mod h1:q8bcK0KcYlCgd9e7WYLm9LpyS+YeLd8JVDW6WezmKEw=
11-
github.com/gobwas/ws v1.3.0 h1:sbeU3Y4Qzlb+MOzIe6mQGf7QR4Hkv6ZD0qhGkBFL2O0=
12-
github.com/gobwas/ws v1.3.0/go.mod h1:hRKAFb8wOxFROYNsT1bqfWnhX+b5MFeJM9r2ZSwg/KY=
11+
github.com/gobwas/ws v1.3.2 h1:zlnbNHxumkRvfPWgfXu8RBwyNR1x8wh9cf5PTOCqs9Q=
12+
github.com/gobwas/ws v1.3.2/go.mod h1:hRKAFb8wOxFROYNsT1bqfWnhX+b5MFeJM9r2ZSwg/KY=
1313
github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY=
1414
github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y=
1515
github.com/kenshaw/rasterm v0.1.8 h1:XHaCBNB0H9HE20z4g2rUrSsObW/PJe1Hn4Ya2iZDi5Y=

0 commit comments

Comments
 (0)