gpt4 book ai didi

uiwebview - 是否可以使用 python 连接到 Mobile Safari 远程调试器协议(protocol)?

转载 作者:行者123 更新时间:2023-12-04 15:03:02 30 4
gpt4 key购买 nike

我有一个在 iOS 上运行的基于 HTML5 的应用程序,我想使用 webkit 远程调试器协议(protocol) 1 连接到它。 iOS 5 现在支持 2 .

我试图找出一个问题,即我的 javascript 应用程序很难使浏览器崩溃 (SEG_FAULT)。我想在应用程序执行时对其进行跟踪,以便查看可能导致问题的线路或网络操作。我目前的想法是编写一个 python 应用程序,它将连接到远程调试器,并在我与应用程序交互时继续单步执行代码并将信息收集到日志文件中。

我遇到了一个最初的障碍,尽管我找不到任何关于如何连接到调试器和通信的示例或文档,或者即使它是可能的。

有谁知道这是否可行,如果可以,你能指点我一些文档和/或示例代码吗?

基于下面的代码,我在 github 上创建了一个项目来测试一些想法。你可以在这里找到它:abierbaum:/python_webkit-remote_debugger

最佳答案

是的,如果您按照说明在 UIWebView 中启用了检查器,则应该可以从 Python 连接到它。我玩弄了它,并弄清楚了如何使用 Web Socket 发送和接收命令。这是使用 websocket-client 的 Python 2.7 脚本

import json
import socket

from websocket import WebSocket


ws = WebSocket()

# if ipv6
ws.io_sock = ws.sock = socket.socket(socket.AF_INET6, socket.SOCK_STREAM)
ws.connect("ws://localhost:9999/devtools/page/1")

counter = 0

def send(method, params):
global counter
counter += 1
# separators is important, you'll get "Message should be in JSON format." otherwise
message = json.dumps({"id": counter, "method": method, "params": params}, separators=(',', ':'))
print "> %s" % (message,)
ws.send(message)

def recv():
result = ws.recv()
print "< %s" % (result,)

send('Runtime.evaluate', {'expression': 'alert("hello from python")'})
recv()

这使用 Runtime.evaluate显示警报的功能。

我尝试针对在模拟器中运行的 MobileSafari 运行它,它运行良好。我注意到两件重要的事情:
  • 远程服务器绑定(bind)到 IPv6 端口,并且 websocket-client 在没有覆盖套接字并设置系列的线路的情况下没有连接。不确定在设备或 UIWebView 上运行是否相同。
  • 它不喜欢 JSON 中分隔符周围的空格。

  • 下面是使用 gdb 在 MobileSafari 中启用检查器并运行脚本的样子:
    $ ps x | grep MobileSafari
    4968 ?? Z 0:00.00 (MobileSafari)
    6234 ?? S 0:00.69 /Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator5.0.sdk//Applications/MobileSafari.app/MobileSafari
    6238 s007 R+ 0:00.00 grep MobileSafari
    $ gdb
    GNU gdb 6.3.50-20050815 (Apple version gdb-1708) (Thu Nov 3 21:59:02 UTC 2011)
    ...
    (gdb) attach 6234
    Attaching to process 6234.
    Reading symbols for shared libraries . done
    Reading symbols for shared libraries ........................................................................................................................................................ done
    0x99798c22 in mach_msg_trap ()
    (gdb) p (void *)[WebView _enableRemoteInspector]
    $1 = (void *) 0x2ac93ce
    (gdb) detach
    Detaching from process 6234.
    (gdb) quit
    $ python debug.py
    > {"params":{"expression":"alert(\"hello from python\")"},"id":1,"method":"Runtime.evaluate"}
    < {"result":{"result":{"type":"undefined","description":"undefined"}},"id":1}

    关于uiwebview - 是否可以使用 python 连接到 Mobile Safari 远程调试器协议(protocol)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8599408/

    30 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com