2016-08-01 8 views
6

के माध्यम से वेबपृष्ठ संसाधन सामग्री कैसे प्राप्त करें मैं इस पृष्ठ से method-getResourceContent पर क्रोम डिबगिंग प्रोटोकॉल के माध्यम से वेबपृष्ठ संसाधन सामग्री का उपयोग पाइथन प्राप्त करना चाहता हूं, मैंने इस विधि को देखा: getResourceContent, पैरा फ्रेम की आवश्यकता है आईडी और url.i सोचें कि यह विधि क्या है मुझे जरूरत है। । \ Chrome.exe --remote-डिबगिंग पोर्ट = 9222क्रोम रिमोट डीबगिंग

2.Write अजगर परीक्षण कोड:

# coding=utf-8 
""" 
chrome --remote-debugging api test 
""" 

import json 
import requests 
import websocket 

import pdb 

def send(): 
    geturl = requests.get('http://localhost:9222/json') 
    websocketURL = json.loads(geturl.content)[0]['webSocketDebuggerUrl'] 
    request = {} 
    request['id'] = 1 
    request['method'] = 'Page.navigate' 
    request['params'] = {"url": 'http://global.bing.com'} 
    ws = websocket.create_connection(websocketURL) 
    ws.send(json.dumps(request)) 
    res = ws.recv() 
    ws.close() 
    print res 

    frameId = json.loads(res)['result']['frameId'] 
    print frameId 
    geturl = requests.get('http://localhost:9222/json') 
    websocketURL = json.loads(geturl.content)[0]['webSocketDebuggerUrl'] 
    req = {} 
    req['id'] = 1 
    req['method'] = 'Page.getResourceContent' 
    req['params'] = {"frameId":frameId,"url": 'http://global.bing.com'} 
    header = ["User-Agent: Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36"] 
    pdb.set_trace() 
    ws = websocket.create_connection(websocketURL,header=header) 
    ws.send(json.dumps(req)) 
    ress = ws.recv() 
    ws.close() 
    print ress 
if __name__ == '__main__': 
    send() 
एक सर्वर के रूप में

1.Get शुरू क्रोम: तो मैं इस काम किया :

3.Page.navigate काम ठीक, मैं कुछ इस तरह मिल गया { "id": 1, "परिणाम": { "frameId": "8504.2"}}

4. जब मैं कोशिश विधि: getResourceContent , त्रुटि आई: {"त्रुटि": {"कोड": - 32000, "संदेश": "एजेंट सक्षम नहीं है । "}," आईडी ": 1}

मैंने उपयोगकर्ता-एजेंट जोड़ने की कोशिश की, अभी भी काम नहीं कर रहा है।

धन्यवाद।

उत्तर

2

त्रुटि संदेश "एजेंट सक्षम नहीं है" HTTP User-Agent शीर्षलेख से कोई लेना देना नहीं है लेकिन क्रोम के भीतर एक एजेंट को संदर्भित करता है जिसे पृष्ठ सामग्री पुनर्प्राप्त करने के लिए सक्षम होना आवश्यक है। के बाद से protocol documentation डोमेन जो ताकि उन्हें डिबग करने में सक्षम किया जाना आवश्यक के बारे में बात करते हैं

अवधि "एजेंट" थोड़ा भ्रामक है (शब्द "एजेंट" जिस तरह से इस क्रोम में आंतरिक रूप से कार्यान्वित किया जाता है को संदर्भित करता है, मुझे लगता है)

तो, प्रश्न यह है कि पृष्ठ सामग्री तक पहुंचने के लिए कौन सा डोमेन सक्षम होना आवश्यक है? अंत में यह काफी स्पष्ट है: Page डोमेन को सक्षम करने की आवश्यकता है क्योंकि हम इस डोमेन में एक विधि कॉल कर रहे हैं। हालांकि, मुझे this example पर ठोकर खाने के बाद ही यह पता चला।

एक बार जब मैंने Page.enablePage डोमेन को सक्रिय करने के लिए स्क्रिप्ट के लिए अनुरोध जोड़ा, तो त्रुटि संदेश गायब हो गया। /:

  1. WebSockets कनेक्शन क्रोम के रूप में अनुरोधों के बीच खुला रखा होने की जरूरत है आमंत्रण (जैसे एजेंट सक्षम है या नहीं के रूप में)
  2. है, वहाँ नेविगेट जब http के बीच कुछ राज्य रखता है: हालांकि, मैं दो अन्य समस्याओं का सामना करना पड़ा /global.bing.com/ ब्राउज़र को पर रीडायरेक्ट किया गया है http://www.bing.com/ (कम से कम यह मेरे कंप्यूटर पर है)। संसाधन को पुनर्प्राप्त करने में विफल होने के कारण Page.getResourceContent का कारण बनता है क्योंकि अनुरोधित संसाधन http://global.bing.com/ उपलब्ध नहीं है।

इन मुद्दों को ठीक करने के बाद मैं पृष्ठ सामग्री को पुनर्प्राप्त करने में सक्षम था। यह मेरा कोड है:

# coding=utf-8 
""" 
chrome --remote-debugging api test 
""" 

import json 
import requests 
import websocket 

def send(): 
    # Setup websocket connection: 
    geturl = requests.get('http://localhost:9222/json') 
    websocketURL = json.loads(geturl.content)[0]['webSocketDebuggerUrl'] 
    ws = websocket.create_connection(websocketURL) 

    # Navigate to global.bing.com: 
    request = {} 
    request['id'] = 1 
    request['method'] = 'Page.navigate' 
    request['params'] = {"url": 'http://global.bing.com'} 
    ws.send(json.dumps(request)) 
    result = ws.recv() 
    print "Page.navigate: ", result 
    frameId = json.loads(result)['result']['frameId'] 

    # Enable page agent: 
    request = {} 
    request['id'] = 1 
    request['method'] = 'Page.enable' 
    request['params'] = {} 
    ws.send(json.dumps(request)) 
    print 'Page.enable: ', ws.recv() 

    # Retrieve resource contents: 
    request = {} 
    request['id'] = 1 
    request['method'] = 'Page.getResourceContent' 
    request['params'] = {"frameId": frameId, "url": 'http://www.bing.com'} 
    ws.send(json.dumps(request)) 
    result = ws.recv() 
    print("Page.getResourceContent: ", result) 

    # Close websocket connection 
    ws.close() 

if __name__ == '__main__': 
    send() 
संबंधित मुद्दे