ما الجديد
أنت تعرف هذا الروتين جيدا. تفتح DevTools، وتعيد تحميل الصفحة، وتمرر عبر عشرات الـ requests حتى تجد أحدها يحتوي على الأسعار التي تبحث عنها، ثم تنقر بزر الفأرة الأيمن وتختار Copy as cURL. بعد ذلك يبدأ العمل الفعلي: إزالة الـ headers التي لا معنى لها إلا داخل Chrome، وإعادة كتابة الطلب ليعمل على عميلك الخاص، واكتشاف ما إذا كان سيستجيب عندما لا يصدر من متصفحك.
تختصر إضافة FourA Chrome extension، المتوفرة الآن في مرحلة beta، هذه العملية إلى بضع نقرات. فهي تضيف تبويب FourA بجوار Network يعرض قائمة بـ requests الصفحة، ويعثر على الطلب الذي يحمل نصا يمكنك رؤيته، وينسخه كاستدعاء جاهز إلى Single أو Proxy Finder أو Browser، بصيغة curl أو Python أو Node أو MCP. كما تحتوي الإضافة نفسها على نافذة منبثقة توجه متصفح Chrome بالكامل عبر أحد مستخدمي proxy port لديك.
الإضافة غير متوفرة في Chrome Web Store بعد. يمكنك تنزيلها من قسم Tools في Dashboard وتحميلها عبر وضع المطورين (developer mode) على Chrome (الإصدار 116 أو أحدث). الإضافة مجانية؛ وتُحتسب حركة المرور عبر النفق من رصيد الـ proxy في خطتك، بينما تكلف الاستدعاءات التي تجريها من DevTools ما تفرضه الـ API.
آلية العمل
افتح DevTools في الصفحة التي تريد جمع البيانات منها واختر تبويب FourA. أعد تحميل الصفحة، وسيعرض التبويب الـ requests بنفس طريقة تبويب Network، مع إخفاء الإعلانات وأدوات التحليل افتراضيا وتوفير خيار This site only لعرض الـ requests الخاصة بالصفحة فقط. اكتب سعرا، أو اسم منتج، أو أي نص تراه داخل حقل Find in responses، وسيرشدك إلى الـ requests التي تتضمن استجابتها هذا النص. غالبا ما تكون هذه هي اللحظة التي تكتشف فيها أن الصفحة تُعرض من JSON endpoint يمكنك استدعاؤه مباشرة.
حدد الـ request، واختر محركا ضمن FourA call، ثم انسخ الكود. هذا هو شكل أمر curl لطلب JSON على صفحة متجر (مختصر: النسخة الكاملة تتضمن كل header أرسلته الصفحة):
curl https://api.foura.ai/api/single \
-H 'X-API-Key: YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{
"method": "GET",
"url": "https://shop.example.com/api/products?category=coffee&page=2",
"headers": [
["accept", "application/json"],
["referer", "https://shop.example.com/coffee"],
["accept-language", "en-GB,en;q=0.9"]
],
"browser": "Chrome",
"os": "macOS",
"unblocker": true
}'
ثلاثة أمور في هذا الاستدعاء مدروسة بعناية. تُرسل الـ headers كقائمة من الأزواج، بنفس الترتيب الذي أرسلته الصفحة، وهو التنسيق الذي يقبله Single. أما القيم التي يكتبها Chrome لاتصاله الخاص (host و content-length و accept-encoding و connection وبعض القيم الأخرى) فيتم إسقاطها، لأن نسخها يؤدي إلى تعطل أي client يرسل الاستدعاء بعد ذلك. وتطلب browser بالإضافة إلى os الـ browser profile المطابق لإصدار Chrome الذي تستخدمه حاليًا. تم استبعاد الإصدار عن قصد، حيث يحصل الاستدعاء على أحدث إصدار نوفره بدلاً من أن يُرفض بسبب إصدار لا ندعمه.
صيغة MCP هي اسم الأداة (foura_single) متبوعًا بنفس كائن الـ JSON، ليكون جاهزًا لأي agent يتصل بـ MCP server الخاص بنا.
ثم يظهر زرّان. يُحمّل Open in the playground الاستدعاء داخل Dashboard Playground، مع تحديد نفس الـ key تلقائيًا إذا كان يخص حسابك. أما Run through FourA فيرسل الطلب ويعرض "The browser got" بجانب "FourA got"، مما يتيح لك معرفة ما إذا كانت إجابتنا تطابق استجابة الصفحة قبل كتابة أي سطر برمجية.
Impact
المسار اليدوي موثق بوضوح. يتطلب دليل ScrapingBee خمس خطوات فقط لاستخراج أمر cURL من Chrome، ويشير إلى أن النسخ يتضمن كل header و cookie أرسلها المتصفح. هذه هي نقطة البداية لمعظم أدوات scraping. لكنه يمثل نصف المهمة فقط، لأن النسخ يثبت فقط أن الـ request يعمل من متصفحك أنت دون أي مكان آخر.
تغطي علامة تبويب FourA كلا النصفين في مكان واحد. يمكنك العثور على الـ request بناءً على البيانات التي يرجعها بدلاً من التخمين عبر عناوين الـ URLs، وتحصل على استدعاء بالهيكل المتوقع من الـ API، وتكفي نقرة واحدة للتحقق مما إذا كان يعمل بنجاح من جانبنا. تظهر الفائدة الكبرى في الصفحات التي تصل بياناتها عبر request لا يكشف عنوان الـ URL الخاص به عن أي تفاصيل.
ليس لدينا أرقام محددة حول الوقت الموفر حتى الآن. إنها نسخة تجريبية بيتا، والمقياس الحقيقي هو مهمتك القادمة.
For Power Users
قم بتبديل المحرك إلى Proxy Finder وستقوم اللوحة بتغليف نفس الـ request وتوفير خيار Exit country:
{
"request": {
"method": "GET",
"url": "https://shop.example.com/api/products?category=coffee&page=2",
"headers": [["accept", "application/json"]],
"unblocker": true
},
"exitCountries": ["DE"]
}
exitCountries هي قائمة سماح صارمة. لا يعود الـ request أبدا كحل بديل إلى دولة أخرى، وتعود الدولة التي خدمت الطلب في قيمة exitCountry. إنها ميزة مرتبطة بالخطة، لذا سترد أي خطة لا تتضمن ميزة الاستهداف الجغرافي بالرفض مع توضيح السبب.
يحصل وضع Browser على بنية مختلفة، لأنه يفتح الصفحات بدلا من إرسال requests مباشرة. فهو يستقبل headers ككائن (object)، ويحول header الـ Cookie الخاص بالصفحة إلى قائمة cookie محددة النطاق للمستضيف، ويستبعد user-agent وheaders الخاصة بـ client-hint، لأن المحرك يرسل قيمه الخاصة (وعند تفعيل خيار profile، يرسل user agent الخاص بهذه النافذة بدلا منها). وهو يعيد فقط تشغيل طلب GET بدون body. أما طلبات POST الناتجة عن نماذج البحث فمكانها المناسب هو Single، حيث يُرسل JSON body ككائن (object) ويُرسل أي شيء آخر كنص مطابق تماما لما أرسلته الصفحة.
انقر بزر الماوس الأيمن على أي request للحصول على نفس خيارات النسخ بالإضافة إلى Copy URL وCopy response. يوجد API key الخاص بعمليات التشغيل في Settings ضمن علامة التبويب ويبقى حتى إغلاق Chrome، ما لم تقم بتحديد Keep the key on this computer.
تحذير واحد، ونحن نعنيه تماما. أي استدعاء يُنسخ مع الـ cookies يعيد تشغيل الجلسة المسجل دخولك إليها. تعامل معه ككلمة مرور وأبعده عن التذاكر، والمحادثات، ومستودعات الأكواد العامة.
يستحق جانب النافذة المنبثقة (popup) إشارة أيضا. فهو يقيس العنوان الذي يراه الموقع عبر النفق بدلا من قراءته من إعداداتك، وعندما يطابق ذلك العنوان عنوانك الخاص يظهر Not routed. عندما يتحول الرمز إلى اللون الأحمر مع رقم، فهذا يعني أن الـ proxy قد رفض هذا العدد من الاتصالات في الدقيقة الأخيرة، وتوضح النافذة المنبثقة السبب. إن خيارات username الموجودة خلف صفحة Location هي نفسها الخيارات الموثقة لمنفذ الـ proxy.
الخطوات القادمة
ستبقى الإضافة بنسخة تجريبية (beta)، ويتم تثبيتها من Dashboard، حتى نعلن اكتمالها، ولا نحدد موعدا لطرحها في متجر Chrome الإلكتروني (Chrome Web Store). متصفح Chrome هو المتصفح الوحيد الذي صُممت واختُبرت من أجله. يوضح دليل الإعداد ما هو متوفر اليوم؛ والتغييرات القادمة تعتمد على ما ستواجهه عند توجيه علامة تبويب FourA نحو مهمة عمل فعلية.
لذا في المرة القادمة التي تقاوم فيها صفحة ما أداة التحليل (parser) الخاصة بك، افتح DevTools قبل أن تفتح كود HTML. غالبا ما تكون أداة الكشط (scraper) الأقل تكلفة هي تلك التي تنفذ نفس الـ request الذي أجرته الصفحة بالفعل.