2017-06-30 27 views
6

क्रोम के दस्तावेज़ कहता है:क्रोम/क्रोमियम हेडलेस पर <body> से अधिक डंप कैसे करें?

--dump-डोम झंडा प्रिंट document.body.innerHTML stdout के लिए:

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

उत्तर

3

अपडेट 2017-10-29 क्रोम पहले से ही - डंप-एचटीएमएल ध्वज है जो पूर्ण HTML को लौटाता है, न केवल शरीर।

v62 में यह है, यह पहले से ही स्थिर चैनल पर है।

अंक जो इस तय: https://bugs.chromium.org/p/chromium/issues/detail?id=752747

वर्तमान क्रोम स्थिति (प्रति चैनल संस्करण) https://www.chromestatus.com/features/schedule

विरासत

के लिए वर्ष जवाब छोड़कर

आप गूगल क्रोम दूरस्थ इंटरफ़ेस के साथ यह कर सकते हैं। मैंने कोशिश की है और क्रोम लॉन्च करने और पूर्ण एचटीएमएल, शीर्षक सहित दो घंटे बर्बाद कर दिया गया है और यह अभी तक तैयार नहीं है, मैं कहूंगा।

यह कभी-कभी काम करता है लेकिन मैंने इसे उत्पादन वातावरण में चलाने की कोशिश की है और समय-समय पर त्रुटियां मिली हैं। connection reset और no chrome found to kill जैसी सभी प्रकार की यादृच्छिक त्रुटियां। उन त्रुटियों ने कभी-कभी को बढ़ाया और इसे डीबग करना मुश्किल है।

मैं व्यक्तिगत रूप से --dump-dom का उपयोग करता हूं जब मुझे शरीर की आवश्यकता होती है और जब मैं शीर्षक की आवश्यकता होती हूं तो मैं अभी curl का उपयोग करता हूं। बेशक क्रोम आपको एसपीए अनुप्रयोगों से शीर्षक दे सकता है, जिसे शीर्षक जेएस से सेट किया गया है, केवल कर्ल के साथ नहीं किया जा सकता है। समाधान स्थिर होने के बाद Google क्रोम पर स्विच होगा।

क्रोम पर --dump-html ध्वज रखना चाहते हैं और बस सभी HTML प्राप्त करें। यदि Google का इंजीनियर इसे पढ़ रहा है, तो कृपया क्रोम में ऐसा ध्वज जोड़ें।

मैं क्रोम समस्या ट्रैकर पर मुद्दा बना लिया है, तो कृपया पसंदीदा 'स्टार' गूगल डेवलपर्स द्वारा देखा करने के लिए:

https://bugs.chromium.org/p/chromium/issues/detail?id=752747

यहाँ क्रोम के लिए झंडे के सभी प्रकार की एक लंबी सूची है , सुनिश्चित नहीं है कि यह पूर्ण है और सभी झंडे: https://peter.sh/experiments/chromium-command-line-switches/ शीर्षक टैग डंप करने के लिए कुछ भी नहीं।

इस कोड को गूगल के ब्लॉग पोस्ट से है, तो आप इस के साथ अपनी किस्मत आजमा सकते हैं:

const CDP = require('chrome-remote-interface'); 

... 

(async function() { 

const chrome = await launchChrome(); 
const protocol = await CDP({port: chrome.port}); 

// Extract the DevTools protocol domains we need and enable them. 
// See API docs: https://chromedevtools.github.io/devtools-protocol/ 
const {Page, Runtime} = protocol; 
await Promise.all([Page.enable(), Runtime.enable()]); 

Page.navigate({url: 'https://www.chromestatus.com/'}); 

// Wait for window.onload before doing stuff. 
Page.loadEventFired(async() => { 
    const js = "document.querySelector('title').textContent"; 
    // Evaluate the JS expression in the page. 
    const result = await Runtime.evaluate({expression: js}); 

    console.log('Title of page: ' + result.result.value); 

    protocol.close(); 
    chrome.kill(); // Kill Chrome. 
}); 

})(); 

स्रोत: https://developers.google.com/web/updates/2017/04/headless-chrome

संबंधित मुद्दे