How to run python script from HTML in google chrome?
P粉471207302
P粉471207302 2023-11-02 23:34:24
0
1
874

I'm building a chrome extension and I want to run a python script from my PC by clicking a button in the extension (basically HTML). The python script uses selenium web-driver to scrape data from the website and store it in another log file.

P粉471207302
P粉471207302

reply all (1)
P粉316110779

You basically usenativeMessaging. It allows you to create a communication bridge between your extension and an external process (such as python).

nativeMessagingworks on your computer and communicates with the Chrome extension via stdin and stdout. For example:

Using Python hosting

This is how you write anativeMessaginghost in python, I've included the full example from the documentation but it's easier to understand with less code.

host.py

This is basically an echo server that respects standard input and standard output, ensuring it is sent as a binary stream.

#!/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

This defines the communication python host, making sure the extension guid is your extension's guid.

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

Host.bat

This will run the python executable.

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

Install host.bat

You run this once to register your host with the operating system.

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

Chrome Extension

manifest.json

Add permissions fornativeMessing

{ "permissions": [ "nativeMessaging" ] }

Communication.js

In order to connect to the python host, you need to do the following:

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

To send a message to your python host, simply send a json object to the port.

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

To know the error when disconnecting:

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

This complete example is in the documentation, I just renamed some stuff for clarity, it works on Windows/Unixhttps://chromium.googlesource.com/chromium/src/ /master/chrome/ common/extensions/docs/examples/api/nativeMessaging

    Latest Downloads
    More>
    Web Effects
    Website Source Code
    Website Materials
    Front End Template
    About us Disclaimer Sitemap
    php.cn:Public welfare online PHP training,Help PHP learners grow quickly!