أدوات المتصفح
يوفر الكريت 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 |
| ChromeDriver | chromedriver --port=4444 |
| GeckoDriver | geckodriver --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
أفضل الممارسات
- استخدام الانتظار: استخدم دائمًا أدوات
browser_wait_* قبل التفاعل مع المحتوى الديناميكي
- تقليل لقطات الشاشة: لقطات الشاشة مكلفة؛ استخدمها بشكل استراتيجي
- إغلاق الجلسات: أغلق دائمًا جلسات المتصفح عند الانتهاء
- معالجة الأخطاء: قد تفشل أتمتة المتصفح؛ تعامل مع مهل الوقت بلطف
- تصفية الأدوات: امنح الوكلاء فقط الأدوات التي يحتاجونها لتقليل التعقيد
السابق: ← Built-in Tools | التالي: UI Tools →