6

Tôi muốn sử dụng công cụ gỡ lỗi ổ cắm từ xa cho Chrome devtools (link) từ Python. Tôi đang sử dụng mã được điều chỉnh từ here.Sử dụng chrome devtools từ xa từ Python

Tôi đã quản lý để có được pinglist_tabs hoạt động. Nhưng tôi không thể tìm ra cách để evaluate_javascript. Ai có thể cho tôi biết tôi đang làm gì sai?

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' 

Trả lời

1

Vấn đề là tôi đã không đặt tab_id cho điểm đến. Thêm đích = 2 vào cuộc gọi yêu cầu sẽ khắc phục sự cố.

2

Tôi xin lỗi vì thư rác, có một thư viện Java cho việc này: http://code.google.com/p/chromedevtools/

Vì bạn có thể chọn Python không một cách ngẫu nhiên, bạn có thể có nó như là một thực hiện tham chiếu nếu chạy mã Java là OK cho bạn. Tôi đoán bạn có thể kiểm tra các thông điệp thực tế được gửi và nhận từ trình gỡ lỗi Java.

+0

Vâng, tôi biết về thư viện Java. (Tôi thực sự có cùng một liên kết trong câu hỏi của tôi nếu bạn xem xét chặt chẽ :) Đã không nghĩ về việc tìm kiếm thông qua các nguồn mặc dù. Đoán tôi sẽ thử rằng nếu không ai có ý tưởng nào tốt hơn. –

+1

Rất tiếc, xin lỗi, giờ tôi thấy. Tôi thực sự không khuyên bạn nên đọc nhiều nguồn - chúng khá phức tạp (một phần do hỗ trợ giao thức Chrome mới "WIP"), tìm kiếm từ trình gỡ lỗi cách nó chạy có thể thú vị hơn :) – beefeather

+0

Điều bạn có thể thấy thú vị là http : //code.google.com/p/chromedevtools/source/browse/#svn%2Ftrunk%2Fplugins%2Forg.chromium.sdk%2Fsrc%2Forg%2Fchromium%2Fsdk%2Finternal%2Fv8native%2Fprotocol%2Finput - nó chứa Java các giao diện thực sự là định nghĩa giao thức 1: 1 (chỉ dành cho dữ liệu đến). – beefeather

Các vấn đề liên quan