从Python使用远程Chrome开发者工具

6 投票
2 回答
3677 浏览
提问于 2025-04-16 21:13

我想在Python中使用Chrome开发者工具的远程调试功能(链接)。

我使用的是从这里改编的代码。

我已经成功让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'

2 个回答

2

抱歉打扰了,这里有一个Java的库可以用来做这个事情:http://code.google.com/p/chromedevtools/

既然你选择Python肯定是有原因的,如果你能接受运行Java代码的话,这个库可以作为一个参考实现。我想你可以查看Java调试器实际发送和接收的消息。

2

问题在于我没有为目标设置一个 tab_id。把请求中的 destination 设置为 2 就解决了这个问题。

撰写回答