This commit is contained in:
Hüseyin
2026-06-16 09:07:10 +03:00
parent 2dfda9d553
commit bd08898bf1
91 changed files with 15477 additions and 11812 deletions

140
app/lib/bot/rodhelper.go Normal file
View 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
// }