-
Notifications
You must be signed in to change notification settings - Fork 1
/
rarejob_util.go
101 lines (93 loc) · 2.83 KB
/
rarejob_util.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
101
package librarejob
import (
"fmt"
"io/fs"
"io/ioutil"
"path/filepath"
"strconv"
"strings"
"time"
"github.com/tebeka/selenium"
"go.uber.org/zap"
)
// TODO(musaprg): dirty logic, needs to be refactored
func waitUntilElementLoaded(wd selenium.WebDriver, by, value string) error {
if waitErr := wd.WaitWithTimeoutAndInterval(func(wd selenium.WebDriver) (bool, error) {
elm, err := wd.FindElement(by, value)
zap.L().Debug("checking if the element has been loaded", zap.String("by", by), zap.String("value", value))
if err == nil {
text, _ := elm.Text()
zap.L().Debug("element has been loaded", zap.String("by", by), zap.String("value", value), zap.String("text", text), zap.Error(err))
}
return err == nil, nil
}, defaultWaitTimeout, defaultWaitInterval); waitErr != nil {
return waitErr
}
return nil
}
func waitUntilURLChanged(wd selenium.WebDriver, url string) error {
var err error
u := ""
if waitErr := wd.WaitWithTimeoutAndInterval(func(wd selenium.WebDriver) (bool, error) {
u, err = wd.CurrentURL()
if err != nil {
return false, err
}
zap.L().Debug("checking if the url has been changed", zap.String("url", u))
return u == url, nil
}, defaultWaitTimeout, defaultWaitInterval); waitErr != nil {
return err
}
return nil
}
func generateTutorSearchQuery(from, by time.Time) (string, error) {
s, err := strconv.Atoi(from.Format("1504"))
if err != nil {
return "", err
}
e, err := strconv.Atoi(by.Format("1504"))
if err != nil {
return "", err
}
// TODO(musaprg): make this configurable via flag
onlyFilipinoTutor := 1
// TODO(musaprg): make this configurable via flag
characteristics := "4"
return fmt.Sprintf(rarejobTutorSearchURL, from.Local().Year(), from.Local().Month(), from.Local().Day(), s, e, int(onlyFilipinoTutor), characteristics), nil
}
func parseTime(s string) (h, m int, err error) {
if t := strings.Split(s, ":"); len(t) == 2 {
h, err = strconv.Atoi(t[0])
if err != nil {
return
}
m, err = strconv.Atoi(t[1])
if err != nil {
return
}
}
return
}
func (c *client) getCurrentURL() string {
url, err := c.wd.CurrentURL()
if err != nil {
zap.L().Debug("current url is empty", zap.Error(err))
}
return url
}
func (c *client) saveCurrentScreenshot(dirPath string, name string) error {
zap.L().Debug("saving screenshot", zap.String("dir_path", dirPath), zap.String("name", name))
if c.debug {
ss, err := c.wd.Screenshot()
if err != nil {
return fmt.Errorf("failed to take screenshot: %w", err)
}
zap.L().Debug("took screenshot", zap.String("dir_path", dirPath), zap.String("name", name))
path := filepath.Join(dirPath, name)
if err := ioutil.WriteFile(path, ss, fs.FileMode(0644)); err != nil {
return fmt.Errorf("failed to write screenshot: %w", err)
}
zap.L().Debug("saved screenshot", zap.String("dir_path", dirPath), zap.String("name", name))
}
return nil
}