Rumah > Soal Jawab > teks badan
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粉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:
Beginilah cara anda menulis hos nativeMessaging dalam python, saya telah sertakan contoh penuh daripada dokumentasi tetapi lebih mudah difahami dengan kod yang lebih sedikit.
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()
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/" ] }
Ini akan menjalankan python boleh laku.
@echo off python "%~dp0/host.py" %*
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
Tambah nativeMessing
kebenaran
{ "permissions": [ "nativeMessaging" ] }
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>