-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathbrowser.go
100 lines (88 loc) · 1.93 KB
/
browser.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
package computeruse
import (
"log"
"strings"
"github.com/go-rod/rod"
"github.com/go-rod/rod/lib/input"
"github.com/go-rod/rod/lib/proto"
)
type Browser struct {
browser *rod.Browser
page *rod.Page
}
func NewBrowser() *Browser {
browser := rod.New().MustConnect()
return &Browser{browser, nil}
}
func (b *Browser) Open(url string) {
log.Println("open", url)
page, err := b.browser.Page(proto.TargetCreateTarget{URL: url})
if err != nil {
log.Println("Error opening page:", err)
return
}
page.MustWaitStable()
b.page = page
}
func (b *Browser) Screenshot() []byte {
screenshot, err := b.page.Screenshot(false, nil)
if err != nil {
log.Println("Error taking screenshot:", err)
return nil
}
return screenshot
}
func (b *Browser) CursorPosition() (x, y int) {
mouse := b.page.Mouse
return int(mouse.Position().X), int(mouse.Position().Y)
}
func (b *Browser) Key(key string) {
keyb := b.page.Keyboard
switch strings.ToLower(key) {
case "enter":
keyb.Press(input.Enter)
case "return":
keyb.Press(input.Enter)
case "delete":
keyb.Press(input.Delete)
case "tab":
keyb.Press(input.Tab)
case "escape":
keyb.Press(input.Escape)
case "left":
keyb.Press(input.ArrowLeft)
case "right":
keyb.Press(input.ArrowRight)
case "up":
keyb.Press(input.ArrowUp)
case "down":
keyb.Press(input.ArrowDown)
case "page_up":
keyb.Press(input.PageUp)
case "page_down":
keyb.Press(input.PageDown)
default:
log.Printf("key: %v is not implemented", key)
}
b.page.MustWaitStable()
}
func (b *Browser) Type(text string) {
page := b.page
page.InsertText(text)
}
func (b *Browser) MouseMove(x, y int) {
mouse := b.page.Mouse
mouse.MustMoveTo(float64(x), float64(y))
}
func (b *Browser) LeftClick() {
mouse := b.page.Mouse
mouse.MustDown("left")
mouse.MustUp("left")
b.page.MustWaitStable()
}
func (b *Browser) RightClick() {
mouse := b.page.Mouse
mouse.MustDown("right")
mouse.MustUp("right")
b.page.MustWaitStable()
}