हेडलैसक्रोम101: कैसे जिट-ब्राउज़र क्रोम को एक पूर्ण मल्टी-फंक्शन ब्राउज़र–सर्वर-ब्राउज़र लेयर में बदलता है
यह एक साधारण भाषा में वॉकथ्रू है कि जिट-ब्राउज़र हेडलेस क्रोम के साथ क्या करता है, यह कैसे स्वामित्व वाले जिट-टीआर रनटाइम का उपयोग करता है, और इसे सिर्फ एक और स्क्रिप्ट के बजाय एक प्रथम श्रेणी का ब्राउज़र फीचर बनाने के लिए अभी भी क्या आवश्यक है।
एक साधारण स्क्रीनशॉट टूल से जिट-ब्राउज़र तक
हमने एक छोटे कमांड-लाइन टूल से शुरुआत की: getpage https://example.com page.png. इसने एक डॉकर कंटेनर में क्रोम को स्पिन किया, पेज से रेंडर किए गए example.com का स्क्रीनशॉट लिया, और बाहर निकल गया।
उपयोगी अवधारणा का प्रमाण। हर कॉल एक कोल्ड स्टार्ट था। इसे अनुवाद, सत्र, या स्थिति के बारे में कुछ नहीं पता था। यह सिर्फ एक हेडलेस कैमरा था।
जिट-ब्राउज़र अगला कदम है। यह अभी भी असली क्रोम का उपयोग करता है, लेकिन अब:
- यह पेज के अंदर क्या होता है, उसे लॉग करता है।
- यह जिट-टीआर स्क्रिप्ट को एक अनुवाद लेयर के रूप में इंजेक्ट करता है।
- यह कुकी बैनर या ड्रॉपडाउन जैसे सरल फ्लो का पालन कर सकता है।
- यह पूरी तरह से अनुवादित HTML को कैप्चर करता है, सिर्फ एक स्क्रीनशॉट नहीं।
यह पेज उस पाइपलाइन की व्याख्या करता है ताकि आप देख सकें कि हम हाथ नहीं हिला रहे हैं। हम दिखा रहे हैं कि एक ब्राउज़र-स्तरीय बहुभाषी लेयर वास्तव में कैसे काम कर सकती है।
जिट-ब्राउज़र पाइपलाइन 6 चरणों में
उच्च स्तर पर, हर कैप्चर एक ही अनुक्रम का पालन करता है।
-
डॉकर के अंदर असली क्रोम (हेडलैस) लॉन्च करें।
हम पपेटियर (pptr.dev) का उपयोग करते हैं ताकि उसी इंजन को शुरू किया जा सके जो सामान्य ब्राउज़रों को शक्ति देता है, लेकिन बिना किसी दृश्य विंडो के। कोई कस्टम पार्सर नहीं, कोई नकली रेंडरिंग नहीं। -
कुकीज़ या लॉगिन स्थिति लागू करें (यदि कॉन्फ़िगर किया गया हो)।
उन डेमो के लिए जिन्हें लॉग-इन सत्र की आवश्यकता होती है, हम आपकी कुकीज़ को फिर से चलाते हैं। कोई बलपूर्वक प्रयास नहीं, कोई पासवर्ड अनुमान नहीं, कोई खाता स्क्रैपिंग नहीं जिसे हम नियंत्रित नहीं करते। -
लक्ष्य पेज को बिल्कुल एक उपयोगकर्ता की तरह लोड करें।
HTML, CSS, जावास्क्रिप्ट, फोंट, छवियाँ। हम प्रतीक्षा करते हैंnetworkidle2(https://pptr.dev/api/puppeteer.page.waitfornetworkidle) ताकि धीमे बंडल और फोंट लोडिंग समाप्त कर सकें। -
जिट-टीआर स्निपेट को एक लेयर के रूप में इंजेक्ट करें।
हम अपने पेटेंट-लंबित रनटाइम कोड की ओर इशारा करते हुए एक स्क्रिप्ट टैग जोड़ते हैं – उदाहरण के लिए:. जिट-टीआर रनटाइम मॉड्यूल उजागर किए गए DOM (document.head और document.body) के माध्यम से चलता है, निकाले गए पेलोड को हमारे (या किसी भी) सर्वर पर प्रोसेसिंग के लिए भेजता है, परिणाम प्राप्त करता है (अनुवाद, संवर्धन, या नई जानकारी), दृश्य पाठ को फिर से लिखता है, और मूल के ऊपर अर्थ की नई परतें जोड़ता है। मौजूद केवल प्रतिबंध सरल हैं: स्क्रिप्ट को संवर्धित किया जा सकता है, लेकिन नई निर्देश साइट की अपनी स्क्रिप्ट के साथ कभी हस्तक्षेप नहीं कर सकते। यह आमतौर परMutationObserverउदाहरणों का उपयोग करके लागू किया जाता है ताकि DOM में प्रासंगिक परिवर्तनों के लिए निगरानी की जा सके, छोटे, लक्षित पैच में अपडेट लागू किए जा सकें, और किसी भी मौजूदा एप्लिकेशन लॉजिक या इवेंट हैंडलर्स को छूने से बचा जा सके। -
वैकल्पिक फ्लो चलाएं: कुकीज़, क्लिक, और स्क्रॉल।
वास्तविक पृष्ठों को अक्सर एक या दो क्रियाओं की आवश्यकता होती है: एक कुकी बैनर को बंद करना, एक मेनू खोलना, अधिक ऑफ़र लोड करने के लिए स्क्रॉल करना। जिट-ब्राउज़र एक सरल फ्लो स्क्रिप्ट चला सकता है ताकि वे तत्व कैप्चर से पहले दिखाई दें। -
संवर्धित आउटपुट को कैप्चर करें।
हम सहेजते हैं:- होस्टिंग या ऑडिट के लिए पूरी तरह से संशोधित HTML।
- संभावित बाधाओं की पहचान करने के लिए एक टाइमिंग ट्रेस।
यह हमारे हेडलेसक्रोम101 का कोर है। यह मानसिक मॉडल है कि कैसे एक ब्राउज़र नए या मौजूदा डेटा को किसी भी ब्राउज़र के अंदर एक बिल्ट-इन लेयर के रूप में मान सकता है।
यह सिर्फ एक खिलौना स्क्रिप्ट क्यों नहीं है
जिट-ब्राउज़र महत्वपूर्ण है क्योंकि यह साबित करता है कि एक ब्राउज़र-स्तरीय लेयर को उन्हीं टुकड़ों के साथ बनाया जा सकता है जो ब्राउज़र विक्रेता हर दिन उपयोग करते हैं, और यह लेयर किसी भी बाहरी सेवा के साथ एक पूर्ण क्लाइंट-सर्वर इंटरैक्शन को सुरक्षित रूप से होस्ट कर सकती है, जिसमें हमारा अपना जिट-टीआर रनटाइम भी शामिल है। यह वह बिंदु भी है जहां हम SEO-जागरूक संवर्धन जोड़ते हैं जैसे कि rel="alternate" hreflang="..." लिंक और समृद्ध sitemap.xml प्रविष्टियाँ। व्यवहार में, इसका मतलब है कि हम गैर-विघटनकारी HTML क्षेत्रों के अंदर संवर्धित जानकारी को उजागर कर सकते हैं जैसे कि मौजूदा पृष्ठ के बाईं या दाईं ओर तत्व, या जावास्क्रिप्ट मोडल का उपयोग करके जो भाषा विकल्प और स्मार्टसर्च को मूल लेआउट या स्क्रिप्ट के साथ हस्तक्षेप किए बिना जोड़ते हैं।
-
असली क्रोम इंजन।
सब कुछ क्रोम पर ही चलता है - बस बिना दृश्य विंडो के। यदि यह आपके आगंतुकों के लिए क्रोम में काम करता है, तो यह जिट-ब्राउज़र में काम करता है। -
कंटेंट सिक्योरिटी पॉलिसी के प्रति जागरूक।
अधिकांश साइटें CSP के साथ स्क्रिप्ट को लॉक कर देती हैं। हेडलेस मोड में हम क्रोम केsetBypassCSP(true)(https://pptr.dev/api/puppeteer.page.setbypasscsp) कैप्चर वातावरण के अंदर Jit-TR को इंजेक्ट करने के लिए। हम किसी भी प्रोडक्शन साइट को उनकी सुरक्षा नीतियों को कमजोर करने की आवश्यकता नहीं है। -
पूर्ण समय और लॉगिंग।
हम लॉन्च समय, पेज लोड समय, Jit-TR स्टार्टअप, फ्लो स्टेप्स, और कैप्चर को लॉग करते हैं। आप देख सकते हैं कि मिलीसेकंड कहाँ जाते हैं और Jit-TR वास्तव में पेज पर क्या करता है। -
स्क्रिप्ट और लेयर का पृथक्करण।
आज, Jit-TR "सिर्फ एक स्क्रिप्ट" हो सकता है जिसे आप साइट में जोड़ते हैं। Jit-Browser में हम इसे एक स्थिर लेयर की तरह मानते हैं जो हमेशा चलती है। यह बहुत करीब है कि एक ब्राउज़र विक्रेता इसे स्वाभाविक रूप से कैसे प्लग कर सकता है।
Jit-TR API पहले से ही क्या हल करता है
कठिन हिस्सा हेडलेस क्रोम नहीं है। कठिन हिस्सा यह है कि जीवंत, गंदे वेब पेजों को सुरक्षित बहुभाषी संस्करणों में विश्वसनीय रूप से बदलना। हमारा स्वामित्व वाला रनटाइम पहले से ही api.jit-tr.com से वह काम करता है।
आज, API रनटाइम संभालता है:
-
भाषा चयन।
यह पैरामीटर पढ़ता है जैसेjittr=ES-419, किनारे के मामलों को सामान्य करता है, और चुनी गई भाषा को लॉग करता है, उदाहरण के लिए:[Jit-TR] चुनी गई भाषा → ES-419. -
DOM निष्कर्षण, अनुवाद, और अर्थपूर्ण पुनर्लेखन।
रनटाइम वास्तविक क्रोम DOM को चलता है, केवल दृश्य पाठ को निकालता है, एक संरचित अनुवाद पेलोड बनाता है, और परिणामों को पेज में वापस लिखता है। सभी कठिन किनारे के मामले स्वचालित हैं: इमोजी अनुक्रम, HTML संस्थाएं, विराम चिह्न और रिक्ति नियम, मिश्रित-भाषा स्ट्रिंग्स, और बाएँ-से-दाएँ / दाएँ-से-बाएँ स्विचिंग। यह भाषा-विशिष्ट स्क्रिप्ट ब्लॉक्स को भी पुनर्लेखित करता है — जिसमेंऔर अन्य संरचित-डेटा टैग शामिल हैं — यह सुनिश्चित करते हुए कि प्रत्येक भाषा के पास खोज इंजन और AI सिस्टम के लिए सही, स्वतंत्र, कैश्ड मेटाडेटा है। -
क्लाइंट व्यवहार।
यह भाषा ध्वजों को प्रस्तुत करता है, असुरक्षित जड़ों का सम्मान करता है, और एकल-पृष्ठ ऐप्स और फ्रेमवर्क के साथ यथासंभव सुरक्षित रूप से खेलता है।
यह सब पहले से ही Jit-TR साइटों पर चलता है। Jit-Browser इसे एक नियंत्रित हेडलेस वातावरण में पुनः उपयोग करता है।
एक देशी ब्राउज़र सुविधा के लिए अभी भी क्या आवश्यक है
एक देशी ब्राउज़र सुविधा के लिए अभी भी क्या आवश्यक है
Jit-Browser को एक अंतर्निहित ब्राउज़र सुविधा में बदलने के लिए, किसी को चमत्कार की आवश्यकता नहीं है - बस एक छोटा, अच्छी तरह से परिभाषित परिवर्तन सेट रखने की क्षमता जो ब्राउज़र इंजन पहले से समझते हैं।
Jit=-Browser को एक अंतर्निहित ब्राउज़र सुविधा में बदलने के लिए। यह कोई चमत्कार नहीं है, बस एक छोटा परिवर्तन सेट है जिसे ब्राउज़र पहले से समझते हैं।
-
इंजन में एक देशी हुक।
आज हम इसे हेडलेस क्रोम से एक स्क्रिप्ट इंजेक्ट करके अनुकरण करते हैं। एक वास्तविक एकीकरण Jit-TR को एक समर्पित अनुवाद स्लॉट देगा ताकि यह रेंडरिंग पाइपलाइन में सही बिंदु पर DOM पाठ को पढ़ और लिख सके। -
भाषा इरादे को व्यक्त करने का एक मानक तरीका।
हम पहले से ही उपयोग करते हैं?jittr=LANGऔर कुकीज़। एक ब्राउज़र-स्तरीय समाधान ब्राउज़र भाषा सेटिंग्स और उपयोगकर्ता विकल्पों का सम्मान कर सकता है जैसे "हमेशा इस साइट को ES-419 में अनुवाद करें"। -
एक स्पष्ट सुरक्षा और गोपनीयता ढांचा।
कौन सा पाठ डिवाइस छोड़ सकता है, इसे कितने समय तक कैश किया जा सकता है, और साइटें या उपयोगकर्ता कैसे बाहर निकल सकते हैं, इसके नियम स्पष्ट और प्रलेखित होने चाहिए। ब्राउज़र के अंदर एक देशी कार्यान्वयन वास्तव में अस्थायी स्क्रिप्ट्स की तुलना में अधिक सुरक्षित हो सकता है।
उदाहरण: HarmonyOS में ES-419
यहाँ पाइपलाइन के क्रियान्वयन का एक ठोस उदाहरण है।
हम कॉल करते हैं:
getpageJtrBrowser \
"https://www.harmonyos.com/" \
"jittr=ES-419" \
null \
"ES-419/index.php"
Jit-Browser:
- डॉकर के अंदर हेडलेस क्रोम लॉन्च करता है।
- लोड करता है
https://www.harmonyos.com/. - ES-419 पैरामीटर के साथ Jit-TR स्निपेट इंजेक्ट करता है।
- Jit-TR को दृश्य चीनी पाठ को स्पेनिश (लैटिन अमेरिका) में अनुवाद करने देता है।
- परिणाम को इस रूप में सहेजता है
ES-419/index.php.
HarmonyOS साइट को बदलने की आवश्यकता नहीं है। उपयोगकर्ता के दृष्टिकोण से, ऐसा लगता है कि साइट बस उनकी भाषा का समर्थन करती है।
यह पृष्ठ क्यों मौजूद है
HeadlessChrome101 एक सारांश है जो दिखाता है:
- हम वास्तविक ब्राउज़र इंजन और वास्तविक CSP नियमों का उपयोग कर रहे हैं।
- हमारे पास पहले से ही एक कार्यशील, स्वामित्व वाला अनुवाद रनटाइम है।
- देशी ब्राउज़र सुविधा के लिए शेष अंतराल छोटा और अच्छी तरह से परिभाषित है।
यदि आप ब्राउज़र, ऑपरेटिंग सिस्टम, या बड़े प्लेटफ़ॉर्म बनाते हैं और एक सार्वभौमिक बहुभाषी परत चाहते हैं जो आपके सुरक्षा मॉडल का सम्मान करती हो, तो हम बात करने के लिए तैयार हैं। कोड मौजूद है। व्यवहार मापने योग्य है। अगला कदम साझेदारी है।