cari

Rumah  >  Soal Jawab  >  teks badan

Bagaimana untuk menjalankan skrip python dari HTML dalam google chrome?

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粉471207302P粉471207302464 hari yang lalu1195

membalas semua(1)saya akan balas

  • P粉316110779

    P粉3161107792023-11-03 14:40:52

    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< /a>

    balas
    0
  • Batalbalas