استخراج HTML الصفحة بعد الجافاسكريبت
أداة تصيير الصفحة تفتح الرابط في متصفح حقيقي وتنتظر اكتمال تنفيذ الجافاسكريبت وبناء الصفحة نهائيًا، ثم تسلّم كود HTML الناتج كما يراه المتصفح فعليًا. تفيد من يحتاج المحتوى الحقيقي لا البنية الأولية الفارغة من التطبيقات الحديثة، خصوصًا حين يعتمد عمله على قراءة الصفحة كما يراها زائر فعلي لا محرك بحث قديم.
شغّلها أونلاين
شغّل هذه المهمة على خوادمنا باستخدام حسابك. الأدوات المجانية تعمل داخل متصفحك، أما هذه فتُخصم من رصيدك في KIT حسب السعر الموضّح أعلاه.
لماذا لا يكفي الكود الخام أحيانًا
كثير من المواقع الحديثة تُبنى بأطر عمل تحمّل الصفحة فارغة تقريبًا في البداية، ثم يملأ الجافاسكريبت المحتوى الفعلي بعد ثوانٍ من التحميل. من يطلب الكود مباشرة دون تنفيذ الجافاسكريبت يحصل على بنية شبه فارغة لا تعكس ما يراه الزائر الحقيقي على الشاشة، وهذا يفشل أي محاولة قراءة أو استخراج تعتمد على الكود الخام وحده. المشكلة تتكرر تحديدًا في تطبيقات الصفحة الواحدة التي تبني كل محتواها بالجافاسكريبت بعد التحميل الأولي مباشرة.
كيف تنتظر الأداة الجاهزية
تفتح الأداة الرابط في متصفح حقيقي وتراقب اكتمال التحميل والتنفيذ حتى استقرار الصفحة، ثم تلتقط كود HTML النهائي بكامل عناصره التي أضافها الجافاسكريبت. هذا يشمل محتوى يُحمَّل متأخرًا، أو عناصر تظهر بعد استدعاء بيانات إضافية من الخادم بعد التحميل الأول. بهذه الطريقة تصل النتيجة معبّرة عن الصفحة في حالتها النهائية المستقرة لا في لحظة عابرة من التحميل، وهو ما يضمن دقة أي استخراج أو تحليل يُبنى عليها لاحقًا.
استخدامات نموذجية
تطوير أداة تحليل صفحات بمحرك بحث آلي، مراجعة كود مُصيّر لصفحة قبل تسليم مشروع، أو تغذية أداة استخراج بيانات أخرى بكود يعكس المحتوى الحقيقي لا بنية فارغة. مطوّرو المواقع خصوصًا يستخدمونها لتشخيص فرق بين ما يعرضه المتصفح وما يستقبله محرك بحث لا يُنفّذ جافاسكريبت، وهو فرق قد يفسّر تراجعًا غير مفهوم في ظهور صفحة بنتائج البحث رغم أن محتواها يبدو كاملًا وواضحًا تمامًا للزائر العادي الذي يفتحها بمتصفحه دون أي مشكلة ظاهرة. تشخيص كهذا يوفر ساعات بحث عن سبب وهمي في مكان آخر من الموقع.
السعر
نحو $0.041 لكل رابط، سواء كان تنفيذ الجافاسكريبت بسيطًا أو معقدًا، لأن التكلفة الأساسية في فتح متصفح حقيقي كامل. تعمل الأداة من هذه الصفحة أو عبر الـAPI لدمجها في خط معالجة آلي يحوّل عشرات الروابط دفعة واحدة دون تدخل يدوي في كل مرة، بسعر واحد ثابت لا يتغير حسب تعقيد الصفحة أو عدد استدعاءات الجافاسكريبت فيها، مهما طال زمن استقرارها قبل الالتقاط النهائي.
حالات الاستخدام
مطور يقارن الكود الخام بالكود المُصيّر
يقارن مطور مستقل كود صفحة قبل تنفيذ الجافاسكريبت وبعده، ليكتشف أي محتوى يظهر للزائر لكنه غائب عن محركات البحث التي لا تُنفّذ الجافاسكريبت.
تغذية أداة تحليل SEO بمحتوى حقيقي
يستخدم فريق تسويق رقمي الكود المُصيّر لتحليل ما يظهر فعليًا لمحرك بحث حديث، بدل الكود الفارغ الذي كان يخدع تحليلهم سابقًا.
تشخيص مشكلة عرض متأخر لمحتوى
يشخّص خالد العتيبي سبب تأخر ظهور قسم أسعار في صفحة موقعه بمراجعة الكود بعد التصيير الكامل، ليتأكد أن العنصر يظهر فعليًا في النهاية.
الأسئلة الشائعة
ما الفرق بين هذه الأداة وأداة استخراج نص المقال؟
هذه تعيد كود HTML كاملًا بكل الوسوم بعد تنفيذ الجافاسكريبت؛ أداة المقال تعيد نصًا نظيفًا فقط بلا وسوم ولا عناصر تصميم.
كم تنتظر الأداة قبل اعتبار الصفحة جاهزة؟
حتى 30 ثانية كحد أقصى لاستقرار التحميل؛ إن لم تكتمل الصفحة خلال هذه المهلة تصل نتيجة بأفضل حالة وصلت إليها.
هل تُحفظ الصفحة بعد التصيير؟
لا، تُستخدم لإنتاج الكود فقط ثم تُحذف دون الاحتفاظ بأي نسخة من محتواها.
هل تعمل مع صفحات تتطلب تسجيل دخول؟
لا، تفتح الأداة الرابط كزائر عادي غير مسجل؛ الصفحات المحمية بكلمة مرور خارج نطاقها حاليًا.
كم تكلفة تصيير مئة صفحة؟
نحو $4.1، بواقع $0.041 للصفحة الواحدة تقريبًا.
هل أحتاج حسابًا للاستخدام؟
لا يوجد تسجيل دخول ولا حساب؛ الدفع مباشر عند كل طلب.
للمطوّرين — الوصول عبر API
كل ما في هذه الصفحة متاح برمجيًا. هذا القسم موجّه للفرق التقنية التي تريد ربط الأداة بأنظمتها الخاصة؛ بقية المستخدمين يمكنهم استخدام الأداة أعلاه مباشرة دون الحاجة لقراءة ما يلي.
الـEndpoint
صادِق على طلبك بترويسة Bearer، وأرسل طلب POST واحدًا لتدخل مهمتك قائمة التنفيذ فورًا؛ ثم تستلم النتيجة عبر webhook أو رابط موقّع.
استدعِ الخدمة من بيئتك
curl -X POST https://api.kit.forhosting.com/web/render \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"url":"https://ejemplo.com"}'const res = await fetch("https://api.kit.forhosting.com/web/render", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"url": "https://ejemplo.com"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/web/render",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"url": "https://ejemplo.com"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/web/render", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"url":"https://ejemplo.com"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"url":"https://ejemplo.com"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/web/render", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)مثال على الطلب
{
"url": "https://ejemplo.com"
}مثال على الاستجابة
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "web.render",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}الواجهة غير متزامنة: تستلم task_id فور الإرسال، ويمكنك الاستعلام عن الحالة بمعدل طلب واحد في الثانية.
الأسعار
السعر معلن كما تراه: لا tokens ولا نظام نقاط؛ وإن فشلت المهمة فلن تُحاسَب عليها.
الحدود
timeout_sec | 30 |
max_crawl_pages | 25 |
الأخطاء
| HTTP | الرمز | المعنى |
|---|---|---|
401 | unauthorized | مفتاح الوصول مفقود أو غير صالح؛ تحقق من ترويسة Bearer في طلبك. |
402 | insufficient_balance | رصيدك لا يكفي لتنفيذ هذه المهمة؛ أعد شحن الرصيد ثم أعد المحاولة. |
404 | unknown_type | نوع المهمة المطلوب غير موجود في الكتالوج — راجع الاسم المرسل في الطلب. |
429 | rate_limited | تجاوزت الحد المسموح من الطلبات؛ انتظر قليلًا ثم أعد المحاولة. |
422 | task_failed | لم تنجح معالجة المهمة، ولن تُحتسب عليك؛ أعد المحاولة أو راسلنا مباشرة. |