تصور کنید یک تغییر کوچک در نام یک کلاس CSS، تمام مجموعهی تستهای اتوماسیون شما را به هم بریزد و ساعتها زمان برای عیبیابی صرف کنید. یک تک سلکتور شکننده میتواند کل یک مجموعه تست End-to-End را متوقف کند یا خط لوله استخراج دادههای (Scraping pipeline) شما را با شکست مواجه سازد. این کابوسِ «سلکتورهای شکننده» اکنون با ابزاری به نام Selector Forge که در ۲۲ ژوئن ۲۰۲۶ عرضه شد، به پایان میرسد. این ابزار با treating کردن مرورگر — و نه هوش مصنوعی — به عنوان منبع نهایی حقیقت برای شناسایی عناصر، این مشکل را حل میکند.
نوشتن سلکتورها معمولاً یک چرخه خستهکننده از بازرسی دستی در کنسول DevTools و آزمون و خطاست. چالش اصلی این است که سلکتورهای تولید شده توسط هوش مصنوعی اغلب دچار توهم میشوند، ویژگیهایی را تصور میکنند که وجود ندارند یا نمیتوانند ماهیت پویا (Dynamic) برنامههای وب مدرن را درک کنند. Intuned برای حل این مشکل، یک حلقه تأیید (Verification loop) را معرفی کرده است که در آن هوش مصنوعی «پیشنهاد» میدهد و مرورگر آن را «اثبات» میکند. این رویکرد در واقع تکامل یافتهی همان سیستمی است که چگونه Intuned چرخه «تشخیص-اصلاح-استقرار» را در اتوماسیون وب خودکار میکند تا دقت عملیات را افزایش دهد.
زمینه و مبانی فنی
همانطور که در پوشش پیشین ما دربارهی عاملهای هوش مصنوعی اشاره کردیم، قدرت واقعی این ابزارها در توانایی تعامل با محیط واقعی است، نه فقط تولید متن. این نیاز به تعامل دقیق، دلیل اصلی است که چرا بسیاری از عاملهای هوش مصنوعی در مدیریت همزمان محیطهای گرافیکی و متنی شکست میخورند و نرخ موفقیت پایینی در محیطهای ترکیبی دارند. Selector Forge یک افزونه مستقل برای مرورگرهای کروم و فایرفاکس است که با استفاده از Manifest V3 (MV3) توسعه یافته است. این ابزار بهطور خاص برای توسعهدهندگانی طراحی شده است که تستهای End-to-End مینویسند، اسکرپرهای داده میسازند یا هر صفحهای را اتوماتیک میکنند که در آن یک سلکتور شکننده باعث افزایش هزینههای نگهداری در آینده شود.
از نظر معماری، این ابزار بر پایه WXT بنا شده و برای رابط کاربری پاپ-آپ از React استفاده میکند. ساختار پروژه به نقشهای مشخصی تقسیم شده است: فایل background.ts مدیریت Service Worker، وضعیت نشست (Session state) و ورودی/خروجی شبکه را بر عهده دارد؛ فایل content.ts مسئول مدیریت لایه انتخابگر (Picker overlay) و دسترسی به DOM است و دایرکتوری popup/ نتایج و کنترلهای حالت (Mode controls) را مدیریت میکند. همچنین یک لایه تخصصی messaging/ تعبیه شده است که یک پروتکل پیامرسانی زمان-اجرا (Runtime-message protocol) تایپشده و تفکیکشده بر اساس جهت ارتباط را فراهم میکند.
طبق مستندات گیتهاب این پروژه، ابزار مذکور از طریق یک حلقه عامل (Agent loop) تخصصی عمل میکند. وقتی شما عنصری را انتخاب میکنید، افزونه یک اسنپشات (Snapshot) فشرده از انتخابهای شما را ثبت میکند که شامل اهداف انتخاب شده، زمینه DOM و کاندیداهای اولیه (Seed candidates) است. این دادهها به بکاند Intuned ارسال میشوند و در آنجا سلکتورهای کاندید پیشنهاد و رتبهبندی میشوند.
نکته حیاتی این است که افزونه سپس تکتک کاندیداها را در برابر DOM زنده تست میکند. اگر یک سلکتور بیش از حد (Over-match) یا کمتر از هدف موردنظر (Under-match) را انتخاب کند، فوراً دور ریخته میشود. این فرآیند تا زمانی تکرار میشود که بکاند به یک «برنده» برسد که در محیط واقعی مرورگر تأیید شده باشد. در نهایت، پاپ-آپ تنها این سلکتورهای بازبینیشده را نمایش میدهد و هر کدام مجهز به یک دکمه کپی هستند.
حالتهای انتخاب و جزئیات
کاربران برای استخراج عناصر دو حالت تعاملی اصلی دارند:
- انتخاب تک (Single Pick): هدف قرار دادن یک عنصر خاص. این حالت کاندیداهای تأیید شده را برای اهدافی مانند دکمهها، فیلدهای ورودی، لینکها و برچسبها (Labels) تولید میکند.
- انتخاب لیستی (List Pick): در این حالت کاربر دو نمونه از یک مجموعه تکرارشونده را انتخاب میکند. سپس ابزار یک سلکتور کانتینر تأییدشده برای کل آن مجموعه تولید میکند که پیش از ذخیرهسازی، پیشنمایشی از آن نمایش داده میشود.
لایههای توسعه و تست
زیرساخت توسعه این پروژه نیازمند Node 18+ است و از Yarn برای مدیریت بستهها استفاده میکند. برای کسانی که قصد مشارکت یا بازرسی کد را دارند، پروژه یک استراتژی تست چندلایه و سختگیرانه را به کار گرفته است:
- لایه واحد (Unit Layer): تستهای سریع Vitest با استفاده از node/happy-dom برای اعتبارسنجی منطق سلکتورها، تبدیلهای وضعیت (State transforms) و ذخیرهسازی.
- لایه مرورگر (Browser Layer): تستهای Vitest در حالت Browser-mode که به عنوان «اوراکل صحت» عمل میکنند و ثابت میکنند هر کاندید دقیقاً به مجموعه عناصر مورد انتظار منجر میشود.
- لایه E2E: تستهای Playwright که روی نسخه بستهبندی شده افزونه MV3 با استفاده از یک صفحه واقعی، جریان اشارهگر (Pointer flow) و Background worker اجرا میشوند.
برای توسعه رابط کاربری، پروژه از Ladle استفاده میکند تا کامپوننتهای React را بهصورت ایزوله در آدرس http://localhost:61010 سرو کند و از نیاز به بازنشانی (Reload) مداوم افزونه جلوگیری نماید. برای مدیریت نبود متغیرهای سراسری WXT در این محیط، یک Stub بدون عملیات (no-op) از طریق .ladle/wxt-globals.ts نصب شده است.
این تغییر رویکرد، هوش مصنوعی را از نقش «نویسنده» به «پیشنهاددهنده» تنزل داده است. با ایجاد یک مرز اعتماد که در آن اعتبارسنجی اجباری است، ریسک توهم در اسکریپتهای اتوماسیون حذف میشود. این یعنی توسعهدهندگان زمان کمتری را صرف اصلاح تستهای شکسته و زمان بیشتری را به ساخت ویژگیها اختصاص میدهند.
برای کاربر، این به معنای پایان «سندروم سلکتور شکننده» است. تصور کنید دیگر مجبور نباشید یک رشته پیچیده XPath را دستی بررسی کنید تا مطمئن شوید با تغییر نام یک کلاس، کل سیستم نمیسوزد. ابزار مذکور تمام سربار اعتبارسنجی را مدیریت کرده و نتیجهای آماده کپی-پیست ارائه میدهد که تضمین شده در وضعیت فعلی صفحه کار میکند.
در نگاه به آینده، نقشه راه این پروژه شامل یک کنترل CLI برای هدایت افزونه از طریق Intuned CLI و ارائه این قابلیتها از طریق پروتکل زمینه مدل (MCP) است. این امر به عاملهای محلی (Local Agents) اجازه میدهد تا تستهای E2E و اتوماسیونها را بهصورت خودگردان اجرا کنند. سیمکشیهای بنیادی، از جمله مجوزهای Tabs و شروع نشست مبتنی بر CDP، در حال حاضر برقرار شده است.
سایر ویژگیهای برنامهریزی شده عبارتند از:
- انتخابگر هوشمند (Smart Picker): حالتی چندگانه برای انتخاب چندین عنصر در یک جریان، شامل تشخیص میدان توسط هوش مصنوعی برای پیشنهاد خودکار نامها و سلکتورهای کاربردی.
- حالتهای Drill-down: پالایش دقیق که به کاربران اجازه دهد در درخت XPath/DOM حرکت کنند (مثلاً از یک span فرزند به کانتینر والد) یا نمونههای غلط را حذف کنند.
- بکاند قابل میزبانی (Self-Hostable): ارائه یک بکاند مرجع و عامل متنباز برای جایگزینی ابر Intuned، تا کل این چرخه روی زیرساختهای خصوصی اجرا شود.
اهداف آتی دیگر شامل تاریخچه اتوماسیون، خروجی به جاوااسکریپت ساده یا Playwright، تشخیص خودکار صفحهبندی (Pagination) و پشتیبانی از Shadow-DOM و سناریوهای Cross-iframe است.
اگر در حال حاضر در حال ساخت اسکرپرهای داده یا تستهای Playwright هستید، میتوانید این افزونه را در Chrome Web Store و صفحه Firefox Add-ons بیابید تا تولید سلکتورهای خود را اتوماتیک کنید.
گام بعدی شما
- اگر از Playwright یا Cypress استفاده میکنید، این افزونه را روی کروم یا فایرفاکس نصب کنید تا سرعت نوشتن تستها را بالا ببرید.
- برای پروژههای حساس، وضعیت Self-hostable بکاند را در نقشه راه (Roadmap) دنبال کنید تا دادههای DOM شما از محیط شرکت خارج نشود.
- قابلیتهای MCP را برای اتصال این ابزار به عاملهای محلی (Local Agents) رصد کنید.
اما داستان سختافزاری این تحول حتی شگفتانگیزتر است — به تحلیل ما دربارهی تراشههای Blackwell مراجعه کنید.




گفتگو