부두 노동자 경주ภายใต้ 네트워킹ของ 용기.อื่น

10427 단어 godocker
กำลังลองเล่น 포장 크롬dphttps://github.com/chromedp/chromedpซึ่งเป็น 싸다ช่วยให้เราเขียน 가다ไปต่อกับ 크롬 합금 엔진แล้วทำอะไรต่างๆได้แบบ 브라우저ทำ โดยผ่านการเขียนโปรแกรมเอง ประโยชน์ก็ใช้สำหรับทำ 네트워크 로보트ทำ 네트워크 파충류/스크레이퍼ต่างๆนั่นเอง
ประเด็นของโพสต์นี้คือ กำลังพยายามเอามันไปรันภายใต้ 부두 노동자ซึ่งไม่มี 크롬อยู่ในนั้น อย่างไรก็ตาม 크롬มีวิธีให้เชื่อมต่อหามันผ่าน 아득히 멀었어โดยใช้ Chrome DevTools Websocket 끝점
ประเด็นต่อมา เราต้องรัน 크롬 도금 무두ซึ่งเป็น 크롬 합금 엔진แบบไม่ต้องติดตั้ง 크롬 응용นั่นเอง ดีที่มีคนทำ docker 이미지เอาไว้แล้วที่นี่ https://hub.docker.com/r/chromedp/headless-shell/
ดังนั้นเราจะใช้งาน 무두포탄ก็รันผ่าน 부두 노동자แบบนี้
docker run -d -p 9222:9222 --rm --name headless-shell chromedp/headless-shell
ต่อมาผมจะลองเล่นโค้ดตัวอย่างของ chromedpจากโค้ดนี้ https://github.com/chromedp/examples/blob/master/remote/main.go
// Command remote is a chromedp example demonstrating how to connect to an
// existing Chrome DevTools instance using a remote WebSocket URL.
package main

import (
    "context"
    "flag"
    "log"

    "github.com/chromedp/chromedp"
)

func main() {
    devtoolsWsURL := flag.String("devtools-ws-url", "", "DevTools WebSsocket URL")
    flag.Parse()
    if *devtoolsWsURL == "" {
        log.Fatal("must specify -devtools-ws-url")
    }

    // create allocator context for use with creating a browser context later
    allocatorContext, cancel := chromedp.NewRemoteAllocator(context.Background(), *devtoolsWsURL)
    defer cancel()

    // create context
    ctxt, cancel := chromedp.NewContext(allocatorContext)
    defer cancel()

    // run task list
    var body string
    if err := chromedp.Run(ctxt,
        chromedp.Navigate("https://duckduckgo.com"),
        chromedp.WaitVisible("#logo_homepage_link"),
        chromedp.OuterHTML("html", &body),
    ); err != nil {
        log.Fatalf("Failed getting body of duckduckgo.com: %v", err)
    }

    log.Println("Body of duckduckgo.com starts with:")
    log.Println(body[0:100])
}
โดยเอามาใส่ 가자.국방부เพื่อจัดการ 싸다ให้ ซึ่ง 가자.국방부มีโค้ดแบบนี้อยู่
module example-chromedp-remote

go 1.16

require github.com/chromedp/chromedp v0.7.1
เสร็จแล้วก็สร้าง Dockerfileให้มันแบบนี้
FROM golang:1.16.4-alpine as builder

WORKDIR /app

COPY go.mod /app
COPY main.go /app

RUN go mod download
RUN go build -o app

FROM alpine
COPY --from=builder /app/app /app
ENTRYPOINT ["/app"]
จากนั้นทำการ 부두 건설 노동자ด้วยคำสั่ง
docker build -t example-chromedp-remote .
สุดท้าย เราจะรัน chromedp 리모컨 예โดยส่ง ws-urlของ 끝이 없다ไปเป็น 선택권ให้มัน ส่วนวิธีหา ws-urlนั้นทำแบบนี้
curl 127.0.0.1:9222/json/version
{
   "Browser": "Chrome/90.0.4430.93",
   "Protocol-Version": "1.3",
   "User-Agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.93 Safari/537.36",
   "V8-Version": "9.0.257.23",
   "WebKit-Version": "537.36 (@4df112c29cfe9a2c69b14195c0275faed4e997a7)",
   "webSocketDebuggerUrl": "ws://127.0.0.1:9222/devtools/browser/68424ed8-a10a-4633-9618-f93b443e0aa9"
}
เราจะเอา 통합 리소스 포지셔닝 주소ตรง "webSocketDebuggerUrl" ไปใช้งานนั่นเอง
ต่อไปก็สั่งรัน chromedp 리모컨 예แบบนี้
docker run --rm --network="container:headless-shell" example-chromedp-remote -devtools-ws-url="ws://127.0.0.1:9222/devtools/browser/68424ed8-a10a-4633-9618-f93b443e0aa9"
จุดที่ทำให้รันโดยเชื่อมต่อไปให้มันเป็น 네트워킹เดียวกัน 지적 재산권.เดียวกันได้คือ 옵션--network="container:headless-shell"นั่นเอง 도안มันคือมี container: ด้านหน้า ตามด้วยชื่อ 용기.ที่จะเอาไปเชื่อมต่อ (참고문헌: https://docs.docker.com/engine/reference/run/#network-container)
แถมท้าย ถ้าใช้ docker composeแทนที่จะรันเองตรงๆนั้น จะใช้ 설정 키ที่ชื่อ 네트워크 모드แต่ว่าแทนที่จะกำหนดชื่อ 용기.ตรงๆ เราใช้ชื่อ 서비스แทนได้โดยใช้ 접두어service:ตามด้วยชื่อ 서비스ตัวอย่างเช่น
---
version: "3.8"
services:

  chrome-headless:
    image: "chromedp/headless-shell"
    ports:
    - "9222:9222"

  example-chromedp-remote:
    build:
      context: .
    network_mode: "service:chrome-headless"
จากนั้นก็สั่งรัน 크롬 도금 무두ผ่าน docker composeแบบนี้
docker compose up -d chrome-headless
แล้วก็รัน chromedp 리모컨 예แบบนี้
docker compose run --rm example-chromedp-remote -devtools-ws-url="ws://127.0.0.1:9222/devtools/browser/cdaa6d7f-3d08-4593-ad4d-0d630abcd627"

สรุป


ถ้าจะเชื่อมต่อไปใช้ 네트워킹ของ 용기.อื่นๆ ผ่าน 부두 노동자 경주ให้ใช้ 옵션-네트워크ค่าที่กำหนดคือ container: ตามด้วยชื่อ 용기.ที่จะไปต่อ เช่น --network="conatiner:headless"แต่ถ้าใช้ docker composeให้กำหนดโดยคีย์ที่ชื่อว่า network_mode ค่าที่กำหนดคือ service: ตามด้วยชื่อ 서비스ที่จะไปต่อ เช่น network_mode: "service:chrome-headless"

ขอฝาก 커피 한 잔 주세요.


สำหรับท่านใดที่อ่านแล้วชอบโพสต์ต่างๆของผมที่นี่ ต้องการสนับสนุนค่ากาแฟเล็กๆน้อยๆ สามารถสนับสนุนผมได้ผ่านทาง 커피 한 잔 주세요.คลิ๊กที่รูปด้านล่างนี้ได้เลยครับ

ส่วนท่านใดไม่สะดวกใช้บัตรเครดิต หรือ 패보สามารถสนับสนุนผมได้ผ่านทาง 선불금โดยดู QR코드ได้จากโพสต์ที่พินเอาไว้ได้ที่ 페이지 디자인ครับ https://web.facebook.com/devdoseth

좋은 웹페이지 즐겨찾기