Best Rod code snippet using rod.GetCookies
dvcscraper.go
Source:dvcscraper.go
...93 return err94 }95 return nil96}97// GetCookies returns a JSON encoded set of the current Scraper's browser's cookies.98//99// This is used in conjunction with `SetCookies` to pre- or re-load browser100// state across scraper runs. For example, to bypass logging in each run and reuse101// sessions.102//103// Callers of `GetCookies` should persist the returned bytes and then call104// `SetCookies` later with the same content. This will "resume" where you left off.105func (s *Scraper) GetCookies() ([]byte, error) {106 cookies, err := s.browser.GetCookies()107 if err != nil {108 err = fmt.Errorf("failed to get cookies from browser: %w", err)109 return []byte{}, err110 }111 raw, err := json.Marshal(&cookies)112 if err != nil {113 err = fmt.Errorf("failed to marshal cookies: %w", err)114 return []byte{}, err115 }116 return raw, nil117}118// SetCookies takes JSON content from the provided io.reader and sets cookies119// on the Scraper's browser.120//121// This is used in conjunction with `GetCookies` to carry-over the current122// browser state/session forward to subsequent scraper runs.123func (s *Scraper) SetCookies(raw io.Reader) error {124 buf := bytes.Buffer{}125 _, err := buf.ReadFrom(raw)126 if err != nil {127 err = fmt.Errorf("failed to read cookie reader: %w", err)128 return err129 }130 cookies := []*proto.NetworkCookie{}131 err = json.Unmarshal(buf.Bytes(), &cookies)132 if err != nil {133 err = fmt.Errorf("failed to unmarshal cookies: %w", err)134 return err135 }136 s.browser.SetCookies(proto.CookiesToParams(cookies))137 return nil138}139// Close cleans up resources for the Scraper140func (s *Scraper) Close() error {141 err := s.cleanup()142 if err != nil {143 s.logger.Println(err.Error())144 }145 return s.browser.Close()146}147func (s *Scraper) cleanup() error {148 cookieWriter, err := os.Create(cookieSessionFile)149 if err != nil {150 err = fmt.Errorf("failed to open session cookie file: %w", err)151 return err152 }153 defer cookieWriter.Close()154 cookieBytes, err := s.GetCookies()155 if err != nil {156 err = fmt.Errorf("failed to get cookies: %w", err)157 return err158 }159 _, err = cookieWriter.Write(cookieBytes)160 return err161}162func (s *Scraper) Screenshot(filename string) error {163 page, err := s.getPage()164 if err != nil {165 err = fmt.Errorf("failed to get page for screenshot: %w", err)166 return err167 }168 page.MustScreenshotFullPage(filename)...
helper.go
Source:helper.go
1package helpers2import (3 "encoding/json"4 "net/http"5 "net/url"6 "strconv"7 "strings"8 "github.com/buger/jsonparser"9 "github.com/ccallazans/twitter-video-downloader/internal/config"10 "github.com/go-rod/rod"11 "github.com/go-rod/rod/lib/launcher"12)13func ValidateUrl(rawUrl *string) error {14 parsedUrl, err := url.ParseRequestURI(*rawUrl)15 if err != nil {16 return ErrorNotValidUrl17 }18 if parsedUrl.Host != "twitter.com" {19 return ErrorNotTwitterUrl20 }21 if parsedUrl.Path == "/" {22 return ErrorEmptyValue23 }24 return nil25}26func ParseUrl(rawUrl *string) (*string, error) {27 parsedUrl, err := url.ParseRequestURI(*rawUrl)28 if err != nil {29 return nil, err30 }31 splitUrl := strings.Split(parsedUrl.Path, "/status/")32 if len(splitUrl) != 2 {33 return nil, ErrorPath34 }35 _, err = strconv.Atoi(splitUrl[1])36 if err != nil {37 return nil, ErrorPath38 }39 return &splitUrl[1], nil40}41func ParseJsonResponse(bodyByte *[]byte) (*string, error) {42 type Content struct {43 Bitrate int `json:"bitrate" validate:"required"`44 ContentType string `json:"content_type" validate:"required"`45 Url string `json:"url" validate:"required"`46 }47 newData, _, _, err := jsonparser.Get(48 *bodyByte,49 "data",50 "threaded_conversation_with_injections_v2",51 "instructions",52 "[0]",53 "entries",54 "[0]",55 "content",56 "itemContent",57 "tweet_results",58 "result",59 "legacy",60 "extended_entities",61 "media",62 "[0]",63 "video_info",64 "variants",65 )66 if err != nil {67 return nil, err68 }69 var myContent []Content70 err = json.Unmarshal(newData, &myContent)71 if err != nil {72 return nil, err73 }74 higher := 075 for i, cont := range myContent {76 if cont.Bitrate > higher {77 higher = i78 }79 }80 return &myContent[higher].Url, nil81}82func DownloadFile(url string) (*http.Response, error) {83 // Get the data84 resp, err := http.Get(url)85 if err != nil {86 return nil, err87 }88 return resp, nil89}90func LoadPageResource(url string) error {91 launch, err := launcher.New().Set("no-sandbox", "true").Launch()92 if err != nil {93 return err94 }95 page := rod.New().ControlURL(launch).NoDefaultDevice().MustConnect().MustPage(url)96 err = page.WaitLoad()97 if err != nil {98 return err99 }100 getCookies := page.MustCookies()101 sessionId := getCookies[0]102 config.RequestHeader.Set("x-guest-token", sessionId.Value)103 return nil104}...
cookie.go
Source:cookie.go
...26 return27}28func GetHttpCookies(page *rod.Page) (cookies []*http.Cookie, err error) {29 var rodCookies []*proto.NetworkCookie30 rodCookies, err = GetCookies(page)31 if err != nil {32 err = fmt.Errorf("GetCookies: %w", err)33 return34 }35 cookies = RodCookies(rodCookies).ToHttpCookies()36 return37}38func GetCookies(page *rod.Page) (cookies []*proto.NetworkCookie, err error) {39 cookies, err = page.Timeout(time.Second * 3).Cookies([]string{40 "https://e.qq.com",41 "https://sso.e.qq.com",42 "https://mp.weixin.qq.com",43 "https://ad.qq.com",44 })45 return46}47func GetCookieMap(page *rod.Page) (cookieMap map[string]*proto.NetworkCookie, err error) {48 cookies, err := GetCookies(page)49 if err != nil {50 err = fmt.Errorf("get cookies: %w", err)51 return52 }53 cookieMap = make(map[string]*proto.NetworkCookie)54 for _, cookie := range cookies {55 cookieMap[cookie.Name] = cookie56 }57 return58}59func GetCookie(page *rod.Page, name string) (cookie *proto.NetworkCookie, err error) {60 var found bool61 var cookieMap map[string]*proto.NetworkCookie62 cookieMap, err = GetCookieMap(page)...
GetCookies
Using AI Code Generation
1import (2func main() {3 browser := rod.New().Connect()4 cookies := page.GetCookies()5 fmt.Println(cookies)6}7[{Name:k1 Value:v1 Domain:httpbin.org Path:/ Expires:0001-01-01 00:00:00 +0000 UTC Secure:false HttpOnly:false SameSite:} {Name:k2 Value:v2 Domain:httpbin.org Path:/ Expires:0001-01-01 00:00:00 +0000 UTC Secure:false HttpOnly:false SameSite:}]
GetCookies
Using AI Code Generation
1import (2func main() {3 browser := rod.New().MustConnect()4 cookies := page.MustGetCookies()5 fmt.Println(cookies)6}7[{"domain":".google.com","expirationDate":1623556190,"hostOnly":false,"httpOnly":false,"name":"1P_JAR","path":"/","sameSite":"no_restriction","secure":false,"session":false,"storeId":"0","value":"2021-06-11-19","id":1},{"domain":".google.com","expirationDate":1623556190,"hostOnly":false,"httpOnly":false,"name":"NID","path":"/","sameSite":"no_restriction","secure":false,"session":false,"storeId":"0","value":"216=7J0x5x2fQ
GetCookies
Using AI Code Generation
1import (2func main() {3 browser := rod.New().MustConnect()4 cookies := page.MustGetCookies()5 fmt.Println(cookies)6}7[{google.com/ false false 2020-10-27 09:20:31.000 +0000 UTC 2020-10-27 09:20:31.000 +0000 UTC 1P_JAR 2020-11-26 09:20:31 UTC 2020-10-27 09:20:31 UTC 2020-10-27 09:20:31 UTC 2020-10-27 09:20:31 UTC}]8import (9func main() {10 browser := rod.New().MustConnect()11 page.MustDeleteCookies()12}13import (14func main() {15 browser := rod.New().MustConnect()16 page.MustSetCookies([]rod.Cookie{17 {18 },19 })20}21import (22func main() {23 browser := rod.New().MustConnect()24 page.MustClearCookies()25}26import (27func main() {28 browser := rod.New().MustConnect()29 cookies := page.MustGetCookies()30 fmt.Println(cookies)31}32[{google.com/ false false 2020-10-27 09
GetCookies
Using AI Code Generation
1import (2func main() {3 browser := rod.New().MustConnect()4 page.MustWaitLoad()5 cookies := page.MustGetCookies()6 for _, cookie := range cookies {7 fmt.Println(cookie.Name)8 }9}
GetCookies
Using AI Code Generation
1import (2func main() {3 fmt.Println("Cookies:", r.GetCookies())4}5import (6func main() {7 fmt.Println("Cookies:", r.GetCookies())8}9import (10func main() {11}12import (13func main() {14}15import (16func main() {17 r.Page("https
GetCookies
Using AI Code Generation
1import (2func main() {3 browser := rod.New().Connect()4 cookies := page.GetCookies()5 fmt.Println(cookies)6}7[{"name":"NID","value":"204=Q2g1hR9dJvLpGjKg7bJr8rE3kq3jKzg7yQ2hC9mJhR9pGjKg7bJr8rE3kq3jKzg7yQ2hC9mJ","domain":".google.com","path":"/","expires":1649267447,"size":63,"httpOnly":true,"secure":true,"session":false,"sameSite":"None"},{"name":"1P_JAR","value":"2021-02-13-07","domain":".google.com","path":"/","expires":1649267447,"size":17,"httpOnly":true,"secure":true,"session":false,"sameSite":"None"},{"name":"CONSENT","value":"YES+IN.en+20210213-07-0","domain":".google.com","path":"/","expires":1649267447,"size":27,"httpOnly":false,"secure":true,"session":false,"sameSite":"None"},{"name":"ANID","value":"YQG-6pZz6BZd6U8wvUgY6e1YbYsW6U8wvUgY6e1YbYsW","domain":".google.com","path":"/","expires":1649267447,"size":44,"httpOnly":true,"secure":true,"session":false,"sameSite":"None"},{"name":"SID","value":"gQFb8FvLd7ZKpLZJ7Bh5n1J5V5Fb8FvLd7ZKpLZJ7Bh5n1J5V5","domain":".google.com","path":"/","expires":1649267447,"size":54,"httpOnly":true,"secure":true,"session":
Learn to execute automation testing from scratch with LambdaTest Learning Hub. Right from setting up the prerequisites to run your first automation test, to following best practices and diving deeper into advanced test scenarios. LambdaTest Learning Hubs compile a list of step-by-step guides to help you be proficient with different test automation frameworks i.e. Selenium, Cypress, TestNG etc.
You could also refer to video tutorials over LambdaTest YouTube channel to get step by step demonstration from industry experts.
Get 100 minutes of automation test minutes FREE!!