如何监控非自有网站实时控制台日志以触发树莓派Chrome标签锁定
解决方案
方案一:实时监控已运行Chrome的控制台日志
要监控已运行Chrome实例的控制台日志,需借助Chrome的远程调试功能,步骤如下:
修改Chrome启动命令
确保启动Chrome时开启远程调试端口,将你原本用xdotool启动Chrome的命令修改为:google-chrome --remote-debugging-port=9222 &(若Chrome已运行,需重启后才能生效,这是开启远程调试的必要前提)
编写Python监控脚本
使用chrome-devtools-protocol库连接远程调试端口,监听控制台日志中的目标函数调用:from cdp import ChromeClient from cdp.console import MessageAddedEvent import os def trigger_lock_logic(): # 这里调用你的锁定标签逻辑,示例:切换到目标标签并停止循环 os.system("xdotool key ctrl+3") # 假设目标标签是第3个,按需调整 # 可通过创建标志文件通知循环脚本停止,比如: os.system("touch /tmp/stop_loop_flag") def monitor_console(): client = ChromeClient("localhost", 9222) # 获取所有标签页,筛选目标网站(替换为你的目标URL关键词) targets = client.target.get_targets().targets target = next(t for t in targets if "你的目标网站关键词" in t.url) # 附加到目标标签页 session = client.target.attach_to_target(target.target_id, flatten=True) client.session_id = session.session_id client.console.enable() def on_log(event: MessageAddedEvent): log_text = event.message.text # 检测目标函数调用(替换为你的目标函数名称) if "目标函数名" in log_text: trigger_lock_logic() client.close() client.console.on("messageAdded", on_log) try: client.wait() except KeyboardInterrupt: client.close() if __name__ == "__main__": monitor_console()先安装依赖:
pip install chrome-devtools-protocol该脚本后台运行时,一旦捕获到目标函数日志,就会触发你的锁定逻辑,同时可通过标志文件通知xdotool循环脚本停止。
方案二:检测页面中的目标名称列表
无需监控日志,直接通过命令行工具与已运行Chrome交互,检测页面元素:
安装chrome-cli工具
sudo apt update && sudo apt install chrome-cli修改xdotool循环脚本
在切换到目标标签时,执行JS获取页面内容并检查目标关键词:#!/bin/bash # 循环标志,1为运行,0为停止 RUN=1 # 目标标签位置(假设是第3个) TARGET_TAB=3 # 目标名称关键词 TARGET_KEYWORD="目标名称" while [ $RUN -eq 1 ]; do # 循环切换标签 xdotool key ctrl+1 sleep 5 xdotool key ctrl+2 sleep 5 xdotool key ctrl+$TARGET_TAB sleep 1 # 检查页面是否存在目标关键词 PAGE_CONTENT=$(chrome-cli execute 'document.body.innerText' --tab $TARGET_TAB) if echo "$PAGE_CONTENT" | grep -q "$TARGET_KEYWORD"; then echo "检测到目标事件,锁定标签" # 停留指定时长(示例为300秒) sleep 300 # 若要彻底停止循环,取消注释下面一行 # RUN=0 fi # 检查是否有停止标志(配合方案一的锁定逻辑) if [ -f /tmp/stop_loop_flag ]; then RUN=0 rm /tmp/stop_loop_flag fi done若需更精确的元素定位,可修改
chrome-cli execute后的JS,比如用document.querySelector('你的CSS选择器').textContent定位特定元素。
内容的提问来源于stack exchange,提问作者bassplyr18954
相关产品推荐
相关产品推荐

