<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                [TOC] > https://github.com/chromedp/chromedp > [官方exmaples](https://github.com/chromedp/examples/blob/master/click/main.go) ## 概述 - 用于控制和自動化谷歌 Chrome 瀏覽器或 Chromium 瀏覽器。 - 它提供了一種以編程方式操作瀏覽器的方法,從而允許開發者執行各種自動化任務,如網頁截圖、網頁爬取、表單填寫、頁面導航等 - 可提供無頭瀏覽器和調啟瀏覽器 ## 與seleiumt 區別 - 底層實現技術: - Selenium:Selenium 是一個跨瀏覽器的自動化測試框架,它使用瀏覽器的原生驅動程序(如Chrome WebDriver、Firefox WebDriver等)來控制瀏覽器。因此,它支持多種瀏覽器,但需要相應的驅動程序。 - chromedp:chromedp 是一個專門用于控制 Chrome 瀏覽器的 Go 語言庫,它使用 Chrome DevTools Protocol 與瀏覽器進行通信。因此,它主要用于自動化 Chrome 瀏覽器。 - 編程語言: - Selenium:Selenium 提供多種編程語言的客戶端庫,包括 Java、Python、C#、JavaScript等,使開發人員可以選擇適合自己的語言來編寫測試腳本。 - chromedp:chromedp 是一個 Go 語言庫,因此主要用于 Go 語言開發。如果您使用 Go 語言,它是一個強大的選擇。 - 社區和生態系統: - Selenium:Selenium 有一個廣泛的社區支持和大量的擴展庫,可以用于各種自動化測試需求。它有許多資源和社區,可以解決各種問題。 - chromedp:chromedp 是相對較新的項目,因此它的生態系統相對較小。但是,它仍然在不斷發展,可以滿足一些特定需求。 - 性能和效率: - chromedp:由于 chromedp 直接與 Chrome 瀏覽器通信,它可以提供更好的性能和效率,特別是在處理大規模的 web 自動化任務時。 - Selenium:Selenium 使用瀏覽器的驅動程序,可能在性能和效率方面略遜于 chromedp,尤其是在處理大量瀏覽器實例時。 - 跨瀏覽器支持: - Selenium:Selenium 是跨瀏覽器的,可以用于控制多種不同的瀏覽器。這使得它在需要在不同瀏覽器中進行測試的情況下非常有用。 - chromedp:chromedp 主要用于控制 Chrome 瀏覽器,因此在需要與其他瀏覽器進行交互的情況下,可能需要使用其他工具或庫。 ## 常用參數 ``` chromedp.NewContext() 初始化chromedp的上下文,后續這個頁面都使用這個上下文進行操作 chromedp.Run() 運行一個chrome的一系列操作 chromedp.Navigate() 將瀏覽器導航到某個頁面 chromedp.WaitVisible() 等候某個元素可見,再繼續執行。 chromedp.Click() 模擬鼠標點擊某個元素 chromedp.Value() 獲取某個元素的value值 chromedp.InnerHTML() 獲取某個元素的內部html值 chromedp.OuterHTML() 獲取某個元素的內部和本身html值 chromedp.ActionFunc() 再當前頁面執行某些自定義函數 chromedp.Text() 讀取某個元素的text值 chromedp.Evaluate() 執行某個js,相當于控制臺輸入js network.SetExtraHTTPHeaders() 截取請求,額外增加header頭 chromedp.SendKeys() 模擬鍵盤操作,輸入字符 chromedp.Nodes() 根據xpath獲取某些元素,并存儲進入數組 chromedp.NewRemoteAllocator chromedp.OuterHTML() 獲取元素的outer html chromedp.Screenshot() 根據某個元素截圖 page.CaptureScreenshot() 截取整個頁面的元素 chromedp.Submit() 提交某個表單 chromedp.WaitNotPresent() 等候某個元素不存在,比如“正在搜索。。。” ``` ## 技巧 ### 顯示瀏覽器 ``` opts := append(chromedp.DefaultExecAllocatorOptions[:], chromedp.Flag("headless", false), ) allocator, cancelFunc := chromedp.NewExecAllocator(context.Background(), opts...) defer cancelFunc() // create chrome instance ctx, cancel := chromedp.NewContext( allocator, chromedp.WithLogf(log.Printf), ) defer cancel() ``` ### Click ``` err := chromedp.Run(ctx, chromedp.Navigate(`https://pkg.go.dev/time`), // wait for footer element is visible (ie, page is loaded) chromedp.WaitVisible(`body > footer`), // find and click "Example" link chromedp.Click(`#example-After`, chromedp.NodeVisible), // retrieve the text of the textarea chromedp.Value(`#example-After textarea`, &example), ) ``` ### cookie 讀寫 ``` err := chromedp.Run(ctx, chromedp.ActionFunc(func(ctx context.Context) error { expr := cdp.TimeSinceEpoch(time.Now().Add(180 * 24 * time.Hour)) err := network.SetCookie("PHPSESSID", "pru4459rc52gsljq3a138rvh4r"). WithExpires(&expr). WithDomain("www.hmoore.net"). // 此參數必填,否則無法跳轉url WithHTTPOnly(true). Do(ctx) if err != nil { return err } return nil }), chromedp.Navigate("http://www.hmoore.net/"), chromedp.ActionFunc(func(ctx context.Context) error { cookies, err := storage.GetCookies().Do(ctx) if err != nil { return err } for i, cookie := range cookies { log.Printf("chrome cookie %d: %+v", i, cookie) } return nil }), ) ``` ### SendKeys 用于模擬鍵盤輸入 ``` err := chromedp.Run(ctx, chromedp.Navigate("https://example.com"), chromedp.SendKeys("#username", "myusername"), ) ``` ### Value / Text Value 獲取 表單元素的值 ``` err := chromedp.Run(ctx, chromedp.Navigate(`https://pkg.go.dev/time`), chromedp.Value(`.js-buildContextSelect`, &res, chromedp.NodeVisible), ) ``` Text 獲取標簽中內容的值 ``` ``` ### InnerHTML / OuterHTML 獲取值 ``` var usernameValue string err := chromedp.Run(ctx, chromedp.Navigate("https://example.com"), chromedp.Value("#username", &usernameValue), ) ``` `InnerHTML` 用于獲取指定元素的內部 HTML 內容,即元素包含的所有子元素和文本內容 ``` var innerHTML string err := chromedp.Run(ctx, chromedp.Navigate("https://example.com"), chromedp.InnerHTML("#elementID", &innerHTML), ) ``` `OuterHTML` 用于獲取指定元素及其包含的所有內容,包括元素本身和其內部的子元素、文本內容等 ``` var outerHTML string err := chromedp.Run(ctx, chromedp.Navigate("https://example.com"), chromedp.OuterHTML("#elementID", &outerHTML), ) ``` ### Screenshot 只截取info ``` var img []byte err := chromedp.Run(ctx, chromedp.Navigate(`http://www.hmoore.net/`), chromedp.Screenshot(".info", &img), //只截取.info 的區域 ) if err != nil { log.Fatal(err) } os.WriteFile("aa.png", img, os.ModePerm) ``` 截圖整個body ``` var img []byte err := chromedp.Run(ctx, chromedp.Navigate(`http://www.hmoore.net/`), chromedp.Screenshot("body", &img), //截取整個 body ) if err != nil { log.Fatal(err) } os.WriteFile("aa.png", img, os.ModePerm) ``` ### FullScreenshot ``` var img []byte err := chromedp.Run(ctx, chromedp.Navigate(`http://www.hmoore.net/`), chromedp.FullScreenshot(&img, 100), //截取整個 body ) if err != nil { log.Fatal(err) } os.WriteFile("aa.png", img, os.ModePerm) ``` ### PDF ``` var img []byte err := chromedp.Run(ctx, chromedp.Navigate(`http://www.hmoore.net/`), chromedp.ActionFunc(func(ctx context.Context) error { img1, _, err := page.PrintToPDF().WithPrintBackground(false).Do(ctx) img = img1 return err }), ) if err != nil { log.Fatal(err) } os.WriteFile("aa.pdf", img, os.ModePerm) ``` ## 文件上傳 ``` err := chromedp.Run(ctx, chromedp.Navigate("https://www.bejson.com/ui/compress_img/"), chromedp.SendKeys(`[type="file"]`, filepath, chromedp.NodeVisible), ) ``` ## runtime.Evaluate 執行自定義js ``` err := chromedp.Run(ctx, chromedp.Navigate("https://www.bejson.com/ui/compress_img/"), chromedp.ActionFunc(func(ctx context.Context) error { runtime.Evaluate(` alert("123"); `).Do(ctx) return nil }), ) ``` ### 等待元素可見 ``` err := chromedp.Run(ctx, chromedp.Navigate("https://www.bejson.com/ui/compress_img/"), chromedp.WaitVisible(`#box1`), chromedp.ActionFunc(func(context.Context) error { log.Printf(">>>>>>>>>>>>>>>>>>>> BOX1 IS VISIBLE") return nil }), ) ``` ### 使用XPath 選擇節點[★] ``` err := chromedp.Run(ctx, chromedp.Navigate("https://www.baidu.com"), chromedp.Click(`//*[contains(text(),'網盤')]`), // 獲取標簽內容為 網盤的節點 ) ``` 更多XPATH 的學習查看 `/前端/XPATH`
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看