【问题标题】:Using remote chrome devtools from Python使用 Python 中的远程 chrome devtools
【发布时间】:2011-10-02 10:50:23
【问题描述】:

我想使用来自 Python 的 Chrome devtools (link) 的远程套接字调试工具。 我正在使用改编自 here 的代码。

我设法让pinglist_tabs 工作。但我不知道如何evaluate_javascript。谁能告诉我我做错了什么?

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'

【问题讨论】:

    标签: javascript python debugging google-chrome google-chrome-devtools


    【解决方案1】:

    对于垃圾邮件,我很抱歉,为此有一个 Java 库: http://code.google.com/p/chromedevtools/

    由于您可能不是随机选择 Python,因此如果您可以运行 Java 代码,您可以将其作为参考实现。我想您可以检查从 Java 调试器发送和接收的实际消息。

    【讨论】:

    • 是的,我知道 Java 库。 (如果您仔细观察,我的问题中实际上有相同的链接 :) 虽然没有考虑过查看源代码。如果没有人有更好的想法,我想我会尝试的。
    • 糟糕,对不起,我明白了。我实际上不建议阅读那么多源代码——它们相当复杂(部分是由于支持新的 Chrome 协议“WIP”),从调试器中查看它的运行方式可能会更有趣:)
    • 你会发现有趣的是code.google.com/p/chromedevtools/source/browse/…——它包含实际上是 1:1 协议定义的 Java 接口(仅用于传入数据)。
    【解决方案2】:

    问题是我没有为目的地设置 tab_id。将destination=2 添加到请求调用可以解决问题。

    【讨论】:

      猜你喜欢
      • 2012-02-07
      • 2018-10-18
      • 2020-03-31
      • 2021-12-26
      • 2018-11-28
      • 2020-04-14
      • 2018-04-16
      • 2013-07-20
      • 2022-01-02
      相关资源
      最近更新 更多