備忘錄_20160105(定位)
修改
回首頁
程式 2026-02-10 17:09:52 1770714592 100
ubuntu + python + google maps
ubuntu + python + google maps
# ubuntu 20.04.6 + gtk 為基底
# python 3.8.10
# cpu 是 intel 系列
import gi
gi.require_version('Gtk', '3.0')
gi.require_version('WebKit2', '4.0')
from gi.repository import Gtk, WebKit2, Gdk, GLib
import random
# ----------------------------
# 截圖函式
# ----------------------------
def take_screenshot(webview):
window = webview.get_window()
if window:
width, height = webview.get_allocated_width(), webview.get_allocated_height()
pb = Gdk.pixbuf_get_from_window(window, 0, 0, width, height)
if pb:
pb.savev("screenshot.png", "png", [], [])
print("截圖完成,存檔為 screenshot.png")
Gtk.main_quit()
# ----------------------------
# 抓 DOM 函式
# ----------------------------
def grab_dom(webview):
js_code = "document.getElementsByClassName('tUEI8e')[0].textContent;"
def js_callback(webview, result, user_data):
value = webview.run_javascript_finish(result).get_js_value()
print("抓到網頁 title:", value.to_string())
# 等 DOM 取完再截圖
take_screenshot(webview)
webview.run_javascript(js_code, None, js_callback, None)
# ----------------------------
# 網頁載入完成 callback
# ----------------------------
def on_load_changed(webview, event, user_data=None):
if event == WebKit2.LoadEvent.FINISHED:
print("網頁載入完成")
# 延遲 20~25 秒再抓 DOM,不阻塞主迴圈
delay = random.randint(20, 25)*1000
GLib.timeout_add(delay, lambda: grab_dom(webview))
# ----------------------------
# 主程式
# ----------------------------
win = Gtk.Window()
win.set_default_size(1920, 1080)
win.set_title("GTK WebView 非阻塞延遲範例")
webview = WebKit2.WebView()
win.add(webview)
win.show_all()
webview.connect("load-changed", on_load_changed)
webview.load_uri("https://www.google.com/maps/dir/嘉里醫藥烏日倉/台中榮民總醫院")
Gtk.main()
import subprocess
# 呼叫另一個 Python 腳本
result = subprocess.run(["python3", "other.py"], capture_output=True, text=True)
# 等待 other.py 執行完畢後再繼續
print("other.py 執行完畢")
print("輸出結果:")
print(result.stdout)