merge
This commit is contained in:
140
app/lib/bot/rodhelper.go
Normal file
140
app/lib/bot/rodhelper.go
Normal file
@@ -0,0 +1,140 @@
|
||||
package bot
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"fmt"
|
||||
"time"
|
||||
|
||||
"github.com/go-rod/rod"
|
||||
"github.com/go-rod/rod/lib/proto"
|
||||
)
|
||||
|
||||
type Select struct {
|
||||
Element *rod.Element
|
||||
Selector string
|
||||
}
|
||||
|
||||
func (elemSelector *Select) SelectItem(changeValue string) error {
|
||||
_, err := elemSelector.Element.Evaluate(rod.Eval(`()=>{document.querySelector("` + elemSelector.Selector + `").value = "` + changeValue + `";}`))
|
||||
_, err = elemSelector.Element.Evaluate(rod.Eval(`()=>{document.querySelector("` + elemSelector.Selector + `").dispatchEvent(new Event('change'));}`))
|
||||
return err
|
||||
|
||||
}
|
||||
func WaitLoad(frm *rod.Page) error { // belli bir süre redirect ten önceki js fonksiyonunun tamamlanması bekleniyor
|
||||
wait := frm.WaitRequestIdle(100*time.Millisecond, nil, nil, nil)
|
||||
wait()
|
||||
err := frm.WaitLoad()
|
||||
return err
|
||||
}
|
||||
func ReceiveDOMMessages(page *rod.Page, selector string, searchValue string) (string, error) {
|
||||
// Tek bir öğe alınması, hata durumunu kontrol etmek için
|
||||
elemd := page.MustElements(selector)
|
||||
|
||||
// Eğer elem boş ise, yani nil ise, hata döndür
|
||||
if len(elemd) == 0 {
|
||||
err := fmt.Errorf("Sellector Bulunamadı: %v", selector)
|
||||
return "", err
|
||||
}
|
||||
elem := page.MustElement(selector)
|
||||
// Eğer elem boş ise, yani nil ise, hata döndür
|
||||
if elem == nil {
|
||||
err := fmt.Errorf("Sellector Bulunamadı: %v", selector)
|
||||
return "", err
|
||||
}
|
||||
|
||||
// Öğenin metnini al
|
||||
//text := elem.MustEval(fmt.Sprintf(`() => this.%s`, searchValue)).String()
|
||||
// text := elem.MustEval(`() => this.innerText`).String()
|
||||
text := elem.MustEval(fmt.Sprintf(`() => this.%s`, searchValue)).String()
|
||||
|
||||
return text, nil
|
||||
}
|
||||
func FillInput(frm *rod.Page, selector string, value string) error {
|
||||
el, err := frm.Element(selector)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
err = el.Input(value)
|
||||
|
||||
return err
|
||||
|
||||
}
|
||||
func ClickItem(frm *rod.Page, selector string, clickCount int) error {
|
||||
// Sayfadan ilgili öğeyi bul
|
||||
el, err := frm.Element(selector)
|
||||
err = el.WaitLoad()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
err = el.Click(proto.InputMouseButtonLeft, clickCount)
|
||||
return err
|
||||
}
|
||||
func Wait(frm *rod.Page, millisecond time.Duration) {
|
||||
wait := frm.WaitRequestIdle(millisecond*time.Millisecond, nil, nil, nil)
|
||||
wait()
|
||||
|
||||
}
|
||||
func CloseBrowser(browser *rod.Browser) {
|
||||
browser.Close()
|
||||
}
|
||||
func (l *Luca) GetPageByUrl(url string) (*rod.Page, error) {
|
||||
allPages, err := l.Page.Browser().Pages()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return allPages.FindByURL("https://auygs.luca.com.tr/Luca/luca.do")
|
||||
}
|
||||
func (l *Luca) GetFrame(page *rod.Page, selector string) (*rod.Page, error) {
|
||||
err := page.WaitLoad()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
frm, err := page.Element(selector)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
frame, err := frm.Frame()
|
||||
return frame, nil
|
||||
}
|
||||
|
||||
func WaitDomElement(page *rod.Page, selector string, duration time.Duration) error {
|
||||
if page == nil {
|
||||
return errors.New("page is nil sellector : " + selector)
|
||||
}
|
||||
//todo: [hd] : timeout taki 10 integer değerini const olarak al ve bunu bastır
|
||||
element, err := page.Timeout(duration * time.Second).Element(selector)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
err = element.WaitLoad()
|
||||
return err
|
||||
}
|
||||
|
||||
func ReceiveDOMMessagesElements(page *rod.Page, selector string, searchValue string, duration time.Duration) (rod.Elements, error) {
|
||||
//todo
|
||||
// Tek bir öğe alınması, hata durumunu kontrol etmek için
|
||||
elemd, err := page.Timeout(duration * time.Second).Elements(selector)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
// Eğer elem boş ise, yani nil ise, hata döndür
|
||||
if len(elemd) == 0 {
|
||||
err := fmt.Errorf("Sellector Bulunamadı: %v", selector)
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return elemd, nil
|
||||
}
|
||||
|
||||
// func (elemSelector *Select) MultipleEvalute(changeValue []string) error {
|
||||
// for i := 0; i < len(changeValue); i++ {
|
||||
// _, err := elemSelector.Element.Evaluate(rod.Eval(changeValue[i]))
|
||||
// if err != nil {
|
||||
// return err
|
||||
// }
|
||||
// }
|
||||
// return nil
|
||||
|
||||
// }
|
||||
Reference in New Issue
Block a user