HeadlessChrome101: چگونه Jit-Browser کروم را به یک مرورگر چندمنظوره کامل تبدیل میکند–لایه مرورگر-سرور
این یک راهنمای ساده به زبان است که توضیح میدهد Jit-Browser با کروم بدون سر، چه کارهایی انجام میدهد، چگونه از زماناجرای اختصاصی Jit-TR استفاده میکند و چه چیزهایی هنوز لازم است تا این ویژگی مرورگر به یک ویژگی درجه یک تبدیل شود و فقط یک اسکریپت دیگر نباشد.
از یک ابزار ساده اسکرینشات تا Jit-Browser
ما با یک ابزار کوچک خط فرمان شروع کردیم: getpage https://example.com page.png. این ابزار کروم را در یک کانتینر داکر راهاندازی کرد، از نمونهکار example.com اسکرینشات گرفت و خارج شد.
مدل مفهومی مفید. هر تماس یک شروع سرد بود. هیچ چیزی درباره ترجمه، نشستها یا وضعیت نمیدانست. فقط یک دوربین بدون سر بود.
Jit-Browser مرحله بعدی است. هنوز از کروم واقعی استفاده میکند، اما اکنون:
- آنچه در داخل صفحه اتفاق میافتد را ثبت میکند.
- اسکریپت Jit-TR را به عنوان یک لایه ترجمه تزریق میکند.
- میتواند جریانهای سادهای مانند بنرهای کوکی یا منوهای کشویی را دنبال کند.
- HTML کاملاً ترجمه شده را ضبط میکند، نه فقط یک اسکرینشات.
این صفحه آن خط لوله را توضیح میدهد تا شما ببینید که ما فقط در حال دستکاری نیستیم. ما نشان میدهیم که چگونه یک لایه چندزبانه در سطح مرورگر میتواند واقعاً کار کند.
خط لوله Jit-Browser در 6 مرحله
در سطح بالا، هر ضبط همان توالی را دنبال میکند.
-
کروم واقعی (بدون سر) را در داکر راهاندازی کنید.
ما از Puppeteer (pptr.dev) برای شروع همان موتور که مرورگرهای عادی را قدرت میدهد، استفاده میکنیم، اما بدون یک پنجره قابل مشاهده. هیچ تجزیهگر سفارشی، هیچ رندرینگ جعلی. -
کوکیها یا وضعیت ورود (اگر پیکربندی شده باشد) را اعمال کنید.
برای دموهایی که به یک نشست وارد شده نیاز دارند، کوکیهای شما را دوباره پخش میکنیم. هیچ نیروی بیرحمانه، هیچ حدس رمز عبور، هیچ جمعآوری حسابهایی که کنترل نمیکنیم. -
صفحه هدف را دقیقاً مانند یک کاربر بارگذاری کنید.
HTML، CSS، جاوااسکریپت، فونتها، تصاویر. ما منتظر میمانیم برایnetworkidle2(https://pptr.dev/api/puppeteer.page.waitfornetworkidle) تا بستههای کند و فونتها بارگذاری شوند. -
قطعه Jit-TR را به عنوان یک لایه تزریق کنید.
ما یک تگ اسکریپت اضافه میکنیم که به کد زماناجرای در حال ثبت اختراع ما اشاره میکند – به عنوان مثال:. ماژول زماناجرای Jit-TR DOM نمایان شده (document.head و document.body) را پیمایش میکند، بار محتوای استخراج شده را به سرور ما (یا هر سرور دیگری) برای پردازش ارسال میکند، نتایج (ترجمه، بهبود یا اطلاعات جدید) را دریافت میکند، متن قابل مشاهده را بازنویسی میکند و لایههای جدیدی از معنا را بر روی اصل اضافه میکند. تنها محدودیتهایی که وجود دارد ساده است: اسکریپتها میتوانند تقویت شوند، اما دستورالعملهای جدید هرگز نمیتوانند با اسکریپتهای خود سایت تداخل کنند. این معمولاً با استفاده ازMutationObserverنمونهها برای نظارت بر تغییرات مربوطه در DOM، اعمال بهروزرسانیها در وصلههای کوچک و هدفمند و اجتناب از لمس هرگونه منطق برنامه موجود یا هندلرهای رویداد پیادهسازی میشود. -
جریانهای اختیاری را اجرا کنید: کوکیها، کلیکها و اسکرول.
صفحات واقعی اغلب به یک یا دو عمل نیاز دارند: بستن یک بنر کوکی، باز کردن یک منو، اسکرول برای بارگذاری پیشنهادات بیشتر. Jit-Browser میتواند یک اسکریپت جریان ساده را اجرا کند تا آن عناصر قبل از ضبط قابل مشاهده باشند. -
خروجی تقویت شده را ضبط کنید.
ما ذخیره میکنیم:- HTML کاملاً تغییر یافته برای میزبانی یا حسابرسی.
- یک ردیابی زمان برای شناسایی گلوگاههای بالقوه.
این هسته HeadlessChrome101 ماست. این مدل ذهنی است که چگونه یک مرورگر میتواند دادههای جدید یا موجود را به عنوان یک لایه داخلی در هر مرورگری در نظر بگیرد.
چرا این فقط یک اسکریپت اسباببازی نیست
Jit-Browser مهم است زیرا ثابت میکند که یک لایه در سطح مرورگر میتواند با همان اجزایی که فروشندگان مرورگر هر روز استفاده میکنند، ساخته شود و این لایه میتواند به طور ایمن یک تعامل کامل کلاینت-سرور با هر سرویس خارجی، از جمله زماناجرای Jit-TR خودمان را میزبانی کند. این همچنین نقطهای است که ما بهبودهای آگاه به SEO مانند rel="alternate" hreflang="..." لینکها و غنیسازی sitemap.xml ورودیها را اضافه میکنیم. در عمل، این به این معنی است که میتوانیم اطلاعات تقویت شده را در داخل مناطق HTML غیر مختل مانند عناصر در سمت چپ یا راست صفحه موجود، یا با استفاده از مدالهای جاوااسکریپت که انتخابهای زبانی و SmartSearch را بدون تداخل با طرحبندی یا اسکریپتهای اصلی اضافه میکنند، افشا کنیم.
-
موتور کروم واقعی.
همه چیز بر روی خود کروم اجرا میشود - فقط بدون پنجره قابل مشاهده. اگر در کروم برای بازدیدکنندگان شما کار میکند، در Jit-Browser نیز کار میکند. -
آگاه به سیاست امنیت محتوای.
بیشتر سایتها اسکریپتها را با CSP قفل میکنند. در حالت بدون سر میتوانیم ازsetBypassCSP(true)(https://pptr.dev/api/puppeteer.page.setbypasscsp) برای تزریق Jit-TR در داخل محیط ضبط. ما نیازی به تضعیف سیاستهای امنیتی هیچ سایت تولیدی نداریم. -
زمانبندی و ثبت کامل.
ما زمانهای راهاندازی، زمانهای بارگذاری صفحه، راهاندازی Jit-TR، مراحل جریان و ضبط را ثبت میکنیم. شما میتوانید ببینید میلیثانیهها کجا میروند و Jit-TR در واقع چه کاری در صفحه انجام میدهد. -
جداسازی اسکریپت و لایه.
امروز، Jit-TR میتواند "فقط یک اسکریپت" باشد که شما به یک سایت اضافه میکنید. در Jit-Browser ما آن را مانند یک لایه پایدار که همیشه اجرا میشود، در نظر میگیریم. این بسیار نزدیک به این است که یک فروشنده مرورگر چگونه میتواند آن را به طور بومی متصل کند.
چه چیزی API Jit-TR قبلاً حل کرده است
قسمت سخت این نیست که کروم بدون سر باشد. قسمت سخت این است که به طور قابل اعتماد صفحات وب زنده و نامنظم را به نسخههای چند زبانه ایمن تبدیل کنیم. زمان اجرای اختصاصی ما در api.jit-tr.com قبلاً این کار را انجام میدهد.
امروز، زمان اجرای API موارد زیر را مدیریت میکند:
-
انتخاب زبان.
این پارامترها را میخواند مانندjittr=ES-419، موارد حاشیهای را نرمالسازی میکند و زبان انتخابشده را ثبت میکند، به عنوان مثال:[Jit-TR] زبان انتخاب شده → ES-419. -
استخراج DOM، ترجمه و بازنویسی معنایی.
اجرای زمان واقعی DOM واقعی کروم را پیمایش میکند، تنها متنهای قابل مشاهده را استخراج میکند، یک بارگذاری ترجمه ساختاریافته میسازد و نتایج را به صفحه بازمیگرداند. تمام موارد دشوار بهطور خودکار انجام میشوند: دنبالههای ایموجی، موجودیتهای HTML، قوانین نشانهگذاری و فاصله، رشتههای چندزبانه و تغییر جهت از چپ به راست / راست به چپ. همچنین بلوکهای اسکریپت خاص زبان را بازنویسی میکند — از جملهو سایر برچسبهای داده ساختاریافته — اطمینان از اینکه هر زبان دارای متاداده صحیح، مستقل و کششده برای موتورهای جستجو و سیستمهای هوش مصنوعی است. -
رفتار مشتری.
این پرچمهای زبانی را نمایش میدهد، به ریشههای ناامن احترام میگذارد و تا حد امکان با برنامههای تکصفحهای و فریمورکها بهطور ایمن عمل میکند.
تمام این موارد در حال حاضر در سایتهای 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"
جیت-مرورگر:
- کروم بدون سر را در داخل داکر راهاندازی میکند.
- بارها
https://www.harmonyos.com/. - کد Jit-TR را با پارامتر ES-419 تزریق میکند.
- بگذارید Jit-TR متن چینی قابل مشاهده را به اسپانیایی (آمریکای لاتین) ترجمه کند.
- نتیجه را به عنوان ذخیره میکند
ES-419/index.php.
سایت HarmonyOS نیازی به تغییر ندارد. از دیدگاه کاربر، به نظر میرسد که سایت به سادگی زبان آنها را پشتیبانی میکند.
چرا این صفحه وجود دارد
HeadlessChrome101 یک خلاصه است که نشان میدهد:
- ما از موتورهای مرورگر واقعی و قوانین CSP واقعی استفاده میکنیم.
- ما قبلاً یک زمان اجرای ترجمه اختصاصی و کارا داریم.
- فاصله باقیمانده تا یک ویژگی بومی مرورگر کوچک و بهخوبی تعریفشده است.
اگر شما مرورگرها، سیستمعاملها یا پلتفرمهای بزرگ میسازید و به یک لایه چندزبانه جهانی که مدل امنیتی شما را رعایت کند نیاز دارید، ما آماده صحبت هستیم. کد وجود دارد. رفتار قابل اندازهگیری است. مرحله بعدی همکاری است.