أدوات المتصفح

يوفر الكريت adk-browser 46 أداة شاملة لأتمتة المتصفح تمكن وكلاء الذكاء الاصطناعي من التفاعل مع صفحات الويب. تم بناء هذه الأدوات على بروتوكول WebDriver (Selenium)، وتعمل مع أي متصفح متوافق مع WebDriver.

نظرة عامة

تسمح أدوات المتصفح للوكلاء بما يلي:

  • التنقل في صفحات الويب وإدارة سجل المتصفح
  • استخراج النصوص والروابط والصور والبيانات المنظمة
  • ملء النماذج والتفاعل مع عناصر الصفحة
  • التقاط لقطات الشاشة وتوليد ملفات PDF
  • تنفيذ JavaScript للأتمتة المتقدمة
  • إدارة ملفات تعريف الارتباط (cookies) والإطارات (frames) والنوافذ المتعددة

بدء سريع

أضف إلى ملف Cargo.toml الخاص بك:

[dependencies]
adk-browser = "0.2.0"
adk-agent = "0.2.0"
adk-model = "0.2.0"

المتطلبات الأساسية

ابدأ تشغيل خادم WebDriver:

# استخدام Docker (موصى به)
docker run -d -p 4444:4444 -p 7900:7900 --shm-size=2g selenium/standalone-chrome:latest

# أو استخدم ChromeDriver مباشرةً
chromedriver --port=4444

الاستخدام الأساسي

use adk_browser::{BrowserSession, BrowserToolset, BrowserConfig};
use adk_agent::LlmAgentBuilder;
use adk_model::GeminiModel;
use std::sync::Arc;

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    // تهيئة جلسة المتصفح
    let config = BrowserConfig::new()
        .webdriver_url("http://localhost:4444")
        .headless(true)
        .viewport(1920, 1080);

    // إنشاء وبدء جلسة المتصفح
    let browser = Arc::new(BrowserSession::new(config));
    browser.start().await?;

    // إنشاء مجموعة الأدوات (toolset) مع جميع الأدوات الـ 46
    let toolset = BrowserToolset::new(browser.clone());
    let tools = toolset.all_tools();

    // إنشاء وكيل AI باستخدام أدوات المتصفح
    let api_key = std::env::var("GOOGLE_API_KEY")?;
    let model = Arc::new(GeminiModel::new(&api_key, "gemini-2.0-flash")?);

    let mut builder = LlmAgentBuilder::new("web_agent")
        .model(model)
        .instruction("أنت مساعد لأتمتة الويب. استخدم أدوات المتصفح لمساعدة المستخدمين.");

    for tool in tools {
        builder = builder.tool(tool);
    }

    let agent = builder.build()?;

    // التنظيف عند الانتهاء
    browser.stop().await?;

    Ok(())
}

أدوات مفلترة

اختر فقط الأدوات التي يحتاجها وكيلك:

let toolset = BrowserToolset::new(browser)
    .with_navigation(true)   // التنقل، العودة، التقدم، التحديث
    .with_extraction(true)   // استخراج_النص، استخراج_السمة، استخراج_الروابط، معلومات_الصفحة، مصدر_الصفحة
    .with_interaction(true)  // النقر، النقر_المزدوج، الكتابة، المسح، التحديد
    .with_wait(true)         // انتظار_العنصر، انتظار، انتظار_تحميل_الصفحة، انتظار_النص
    .with_screenshot(true)   // لقطة_الشاشة
    .with_js(true)           // تقييم_js، التمرير، التحويم، التعامل_مع_التنبيه
    .with_cookies(false)     // تعطيل أدوات ملفات تعريف الارتباط
    .with_frames(false)      // تعطيل أدوات الإطارات
    .with_windows(false)     // تعطيل أدوات النوافذ
    .with_actions(false);    // تعطيل الإجراءات المتقدمة

let tools = toolset.all_tools();

الأدوات المتاحة (46 إجمالاً)

التنقل (4 أدوات)

Toolالوصف
browser_navigateالانتقال إلى عنوان URL
browser_backالرجوع في السجل
browser_forwardالتقدم في السجل
browser_refreshتحديث الصفحة الحالية

الاستخراج (5 أدوات)

Toolالوصف
browser_extract_textاستخراج النص المرئي من العنصر
browser_extract_attributeالحصول على قيمة سمة من العنصر
browser_extract_linksاستخراج جميع الروابط في الصفحة
browser_page_infoالحصول على عنوان URL الحالي والعنوان
browser_page_sourceالحصول على مصدر HTML

التفاعل (5 أدوات)

Toolالوصف
browser_clickالنقر على عنصر
browser_double_clickالنقر المزدوج على عنصر
browser_typeكتابة نص في عنصر
browser_clearمسح حقل إدخال
browser_selectتحديد خيار من قائمة منسدلة

الانتظار (4 أدوات)

Toolالوصف
browser_wait_for_elementانتظار ظهور عنصر
browser_waitالانتظار لمدة زمنية
browser_wait_for_page_loadانتظار تحميل الصفحة
browser_wait_for_textانتظار ظهور نص

لقطات الشاشة (1 أداة)

Toolالوصف
browser_screenshotالتقاط لقطة شاشة للصفحة أو العنصر

JavaScript (4 أدوات)

Toolالوصف
browser_evaluate_jsتنفيذ كود JavaScript
browser_scrollتمرير الصفحة
browser_hoverالتحويم فوق عنصر
browser_handle_alertالتعامل مع تنبيهات JavaScript

الكوكيز (5 أدوات)

Toolالوصف
browser_get_cookiesالحصول على جميع ملفات تعريف الارتباط
browser_get_cookieالحصول على ملف تعريف ارتباط محدد
browser_add_cookieإضافة ملف تعريف ارتباط
browser_delete_cookieحذف ملف تعريف ارتباط
browser_delete_all_cookiesحذف جميع ملفات تعريف الارتباط

النوافذ/علامات التبويب (8 أدوات)

Toolالوصف
browser_list_windowsسرد جميع النوافذ/علامات التبويب
browser_new_tabفتح علامة تبويب جديدة
browser_new_windowفتح نافذة جديدة
browser_switch_windowالتبديل إلى نافذة
browser_close_windowإغلاق النافذة الحالية
browser_maximize_windowتكبير النافذة
browser_minimize_windowتصغير النافذة
browser_set_window_sizeتعيين حجم النافذة

الإطارات (3 أدوات)

Toolالوصف
browser_switch_to_frameالتبديل إلى iframe
browser_switch_to_parent_frameالتبديل إلى الإطار الرئيسي
browser_switch_to_default_contentالتبديل إلى المستند الرئيسي

الإجراءات (7 أدوات)

Toolالوصف
browser_drag_and_dropسحب وإسقاط العناصر
browser_right_clickالنقر بزر الفأرة الأيمن على عنصر
browser_focusالتركيز على عنصر
browser_element_stateالحصول على حالة العنصر (مرئي، ممكّن، محدد)
browser_press_keyالضغط على مفتاح لوحة المفاتيح
browser_file_uploadتحميل ملف إلى حقل الإدخال
browser_print_to_pdfإنشاء PDF من الصفحة

محددات العناصر

تقبل الأدوات التي تستهدف العناصر محددات CSS:

// By ID
"#login-button"

// By class
".submit-btn"

// By tag and attribute
"input[type='email']"

// By data attribute
"[data-testid='search']"

// Complex selectors
"form.login input[name='password']"

// Nth child
"ul.menu li:nth-child(3)"

مثال: وكيل أبحاث الويب

use adk_browser::{BrowserSession, BrowserToolset, BrowserConfig};
use adk_agent::LlmAgentBuilder;
use std::sync::Arc;

let config = BrowserConfig::new().webdriver_url("http://localhost:4444");
let browser = Arc::new(BrowserSession::new(config));
browser.start().await?;

let toolset = BrowserToolset::new(browser.clone())
    .with_navigation(true)
    .with_extraction(true)
    .with_screenshot(true);

let mut builder = LlmAgentBuilder::new("researcher")
    .model(model)
    .instruction(r#"
        You are a web research assistant. When asked about a topic:
        1. Navigate to relevant websites using browser_navigate
        2. Extract key information using browser_extract_text
        3. Take screenshots of important content using browser_screenshot
        4. Summarize your findings
    "#);

for tool in toolset.all_tools() {
    builder = builder.tool(tool);
}

let agent = builder.build()?;

مثال: أتمتة النماذج

let agent = LlmAgentBuilder::new("form_filler")
    .model(model)
    .instruction(r#"
        You are a form automation assistant. To fill forms:
        1. Use browser_navigate to go to the form page
        2. Use browser_extract_text to see form labels
        3. Use browser_type to fill text fields
        4. Use browser_select for dropdowns
        5. Use browser_click to submit
    "#)
    .build()?;

التهيئة

let config = BrowserConfig::new()
    .webdriver_url("http://localhost:4444")
    .headless(true)
    .viewport(1920, 1080)
    .page_load_timeout(30)
    .user_agent("Custom User Agent");

let browser = Arc::new(BrowserSession::new(config));
browser.start().await?;

خيارات WebDriver

يعمل مع أي خادم متوافق مع WebDriver:

الخادمCommand
Selenium (Chrome)docker run -d -p 4444:4444 selenium/standalone-chrome
Selenium (Firefox)docker run -d -p 4444:4444 selenium/standalone-firefox
ChromeDriverchromedriver --port=4444
GeckoDrivergeckodriver --port=4444

معالجة الأخطاء

أدوات المتصفح تُرجع أخطاء منظمة:

match result {
    Ok(value) => println!("Success: {:?}", value),
    Err(e) => {
        match e {
            BrowserError::ElementNotFound(selector) => {
                println!("Could not find element: {}", selector);
            }
            BrowserError::Timeout(duration) => {
                println!("Operation timed out after {:?}", duration);
            }
            BrowserError::SessionClosed => {
                println!("Browser session was closed");
            }
            _ => println!("Browser error: {}", e),
        }
    }
}

أمثلة

# جلسة متصفح أساسية
cargo run --example browser_basic

# وكيل ذكاء اصطناعي مزود بأدوات المتصفح
cargo run --example browser_agent

# مثال تفاعلي كامل بـ 46 أداة
cargo run --example browser_interactive

# وكيل متصفح مدعوم بـ OpenAI
cargo run --example browser_openai --features openai

أفضل الممارسات

  1. استخدام الانتظار: استخدم دائمًا أدوات browser_wait_* قبل التفاعل مع المحتوى الديناميكي
  2. تقليل لقطات الشاشة: لقطات الشاشة مكلفة؛ استخدمها بشكل استراتيجي
  3. إغلاق الجلسات: أغلق دائمًا جلسات المتصفح عند الانتهاء
  4. معالجة الأخطاء: قد تفشل أتمتة المتصفح؛ تعامل مع مهل الوقت بلطف
  5. تصفية الأدوات: امنح الوكلاء فقط الأدوات التي يحتاجونها لتقليل التعقيد

السابق: ← Built-in Tools | التالي: UI Tools →