Bagaimana untuk menjalankan skrip python dari HTML dalam google chrome?
P粉471207302
P粉471207302 2023-11-02 23:34:24
0
1
1076

Saya sedang membina sambungan krom dan saya mahu menjalankan skrip python dari PC saya dengan mengklik butang dalam sambungan (pada asasnya HTML). Skrip python menggunakan pemacu web selenium untuk mengikis data daripada tapak web dan menyimpannya dalam fail log lain.

P粉471207302
P粉471207302

membalas semua(1)
P粉316110779

Anda pada asasnya menggunakan nativeMessaging. Ia membolehkan anda mencipta jambatan komunikasi antara sambungan anda dan proses luaran (seperti python).

nativeMessaging berfungsi pada komputer anda dan berkomunikasi dengan sambungan Chrome melalui stdin dan stdout. Contohnya:

Menghos dengan Python

Beginilah cara anda menulis hos nativeMessaging dalam python, saya telah sertakan contoh penuh daripada dokumentasi tetapi lebih mudah difahami dengan kod yang lebih sedikit.

host.py

Ini pada asasnya adalah pelayan gema yang menghormati stdin dan stdout, memastikan ia dihantar sebagai aliran binari.

#!/usr/bin/env python

import struct
import sys
import os, msvcrt

# Set the I/O to O_BINARY to avoid modifications from input/output streams.
msvcrt.setmode(sys.stdin.fileno(), os.O_BINARY)
msvcrt.setmode(sys.stdout.fileno(), os.O_BINARY)

# Helper function that sends a message to the webapp.
def send_message(message):
   # Write message size.
  sys.stdout.write(struct.pack('I', len(message)))
  # Write the message itself.
  sys.stdout.write(message)
  sys.stdout.flush()

# Thread that reads messages from the webapp.
def read_thread_func():
  message_number = 0
  while 1:
    # Read the message length (first 4 bytes).
    text_length_bytes = sys.stdin.read(4)

    if len(text_length_bytes) == 0:
      sys.exit(0)

    # Unpack message length as 4 byte integer.
    text_length = struct.unpack('i', text_length_bytes)[0]

    # Read the text (JSON object) of the message.
    text = sys.stdin.read(text_length).decode('utf-8')

    send_message('{"echo": %s}' % text)


def Main():
    read_thread_func()
    sys.exit(0)

if __name__ == '__main__':
  Main()

host.json

Ini mentakrifkan hos python komunikasi, memastikan panduan sambungan ialah panduan sambungan anda.

{
  "name": "com.google.chrome.example.echo",
  "description": "Chrome Native Messaging API Example Host",
  "path": "host.bat",
  "type": "stdio",
  "allowed_origins": [
    "chrome-extension://knldjmfmopnpolahpmmgbagdohdnhkik/"
  ]
}

Hos.bat

Ini akan menjalankan python boleh laku.

@echo off
python "%~dp0/host.py" %*

Pasang host.bat

Anda menjalankan ini sekali untuk mendaftarkan hos anda dengan sistem pengendalian.

REG ADD "HKCU\Software\Google\Chrome\NativeMessagingHosts\com.google.chrome.example.echo" /ve /t REG_SZ /d "%~dp0host.json" /f

Sambungan Chrome

manifest.json

Tambah nativeMessing kebenaran

{
  "permissions": [
    "nativeMessaging"
  ]
}

komunikasi.js

Untuk menyambung ke hos python, anda perlu melakukan perkara berikut:

const hostName = "com.google.chrome.example.echo";
let port = chrome.runtime.connectNative(hostName);
port.onMessage.addListener(onNativeMessage);
port.onDisconnect.addListener(onDisconnected);

Untuk menghantar mesej kepada hos python anda, hanya hantar objek json ke port.

const message = {"text": "Hello World"};
if (port) {
    port.postMessage(message);
}

Untuk mengetahui ralat semasa memutuskan sambungan:

function onDisconnected() {
  port = null;
  console.error(`Failed to connect: "${chrome.runtime.lastError.message}"`);
}

Contoh penuh adalah dalam dokumentasi, saya hanya menamakan semula beberapa perkara untuk kejelasan, berfungsi pada Windows/Unix https://chromium.googlesource.com/chromium/src/+/master/chrome/common/extensions /docs/examples /api/nativeMessaging

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan