6

PythonのChrome devtools(link)のリモートソケットデバッグ用のものを使いたいと思います。 私はhereに適合したコードを使用しています。Pythonのリモートクロムdevtoolsの使用

pinglist_tabsが正常に機能しました。しかし、私はどのようにevaluate_javascriptを理解することはできません。誰かが私が間違っていることを教えてもらえますか? Javaコードを実行することはOKである場合は、リファレンス実装としてそれを持つことができ、あなたはおそらくないランダムにはPythonを選んだので http://code.google.com/p/chromedevtools/

:私はスパムのためにごめんなさい

import subprocess 
import time, json, socket 

from jca.files import my_paths 

def request(tool, destination=None, **kw): 
    # Send a command via socket to 'DevToolsService' or 'V8Debugger' 
    j = json.dumps(kw) 
    request = 'Content-Length:%d\r\nTool:%s\r\n' % (len(j), tool) 
    if destination: 
    request += 'Destination:%s\r\n' % (destination,) 
    request += '\r\n%s\r\n' % (j,) 
    sock.send(request) 
    if kw.get('command', '') not in RESPONSELESS_COMMANDS: 
    time.sleep(.1) 
    response = sock.recv(30000) 
    if response.strip(): 
     j = response.split('\r\n\r\n', 1)[1] 
     return json.loads(j) 

if __name__ == '__main__': 
    proc = subprocess.Popen('"%s" --remote-shell-port=9222' % my_paths.chrome_exe) 
    RESPONSELESS_COMMANDS = ['evaluate_javascript'] 
    sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
    sock.connect(('localhost', 9222)) 
    sock.send('ChromeDevToolsHandshake\r\n') 
    result = sock.recv(1024) 
    print 'ping: ', request('DevToolsService', command='ping') 
    time.sleep(4) 
    print 'list_tabs: ', request('DevToolsService', command='list_tabs') 
    request('V8Debugger', command='evaluate_javascript', 
      data='javascript:window.location.reload()') 
    sock.close() 
    print 'done' 

答えて

1

問題は、宛先のtab_idを設定しなかったことです。要求の呼び出しにdestination = 2を追加すると、問題が修正されます。

2

は、このためのJavaライブラリがありますあなたのために。私はあなたがJavaデバッガから送受信された実際のメッセージをチェックできると思います。

+0

ええ、私はJavaライブラリについて知っています。 (私が実際にあなたが密接に見ても私の質問に同じリンクがあります:)しかし、ソースを見て考えることはありませんでした。誰も良いアイデアを持っていない場合は、私はそれを試してみようと思う。 –

+1

おっと、申し訳ありません。私は実際にはあまりソースを読むことをお勧めしません - 彼らは非常に複雑です(部分的には新しいChromeプロトコル "WIP"のサポートによるものです)、デバッガから見てどのように実行するのが楽しいかもしれません:) – beefeather

+0

興味深いものがhttp ://code.google.com/p/chromedevtools/source/browse/#svn%2Ftrunk%2Fplugins%2Forg.chromium.sdk%2Fsrc%2Forg%2Fchromium%2Fsdk%2Finternal%2Fv8native%2Fprotocol%2Finput - Javaを含んでいます実際には1:1プロトコル定義(入力データのみ)のインターフェイスです。 – beefeather

関連する問題