أدوات المتصفح
توفر adk-browser 46 أداة شاملة لأتمتة المتصفح تمكن وكلاء الذكاء الاصطناعي من التفاعل مع صفحات الويب. بنيت على بروتوكول WebDriver (Selenium)، وتعمل مع أي متصفح متوافق مع WebDriver.
نظرة عامة
تسمح أدوات المتصفح للوكلاء بما يلي:
- التنقل في صفحات الويب وإدارة سجل المتصفح
- استخراج النصوص والروابط والصور والبيانات المهيكلة
- ملء النماذج والتفاعل مع عناصر الصفحة
- أخذ لقطات شاشة وإنشاء PDFs
- تنفيذ JavaScript للأتمتة المتقدمة
- إدارة ملفات تعريف الارتباط والإطارات والنوافذ المتعددة
بدء سريع
أضف إلى Cargo.toml الخاص بك:
[dependencies]
adk-browser = "2.0.0"
adk-agent = "2.0.0"
adk-model = "2.0.0"
المتطلبات الأساسية
ابدأ خادم WebDriver:
# Using Docker (recommended)
docker run -d -p 4444:4444 -p 7900:7900 --shm-size=2g selenium/standalone-chrome:latest
# Or use ChromeDriver directly
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>> {
// Configure browser session
let config = BrowserConfig::new()
.webdriver_url("http://localhost:4444")
.headless(true)
.viewport(1920, 1080);
// Create and start browser session
let browser = Arc::new(BrowserSession::new(config));
browser.start().await?;
// Create toolset with all 46 tools
let toolset = BrowserToolset::new(browser.clone());
let tools = toolset.all_tools();
// Create AI agent with browser tools
let api_key = std::env::var("GOOGLE_API_KEY")?;
let model = Arc::new(GeminiModel::new(&api_key, "gemini-2.5-flash")?);
let mut builder = LlmAgentBuilder::new("web_agent")
.model(model)
.instruction("You are a web automation assistant. Use browser tools to help users.");
for tool in tools {
builder = builder.tool(tool);
}
let agent = builder.build()?;
// Clean up when done
browser.stop().await?;
Ok(())
}
أدوات مصفاة
حدد فقط الأدوات التي يحتاجها وكيلك:
let toolset = BrowserToolset::new(browser)
.with_navigation(true) // navigate, back, forward, refresh
.with_extraction(true) // extract_text, extract_attribute, extract_links, page_info, page_source
.with_interaction(true) // click, double_click, type, clear, select
.with_wait(true) // wait_for_element, wait, wait_for_page_load, wait_for_text
.with_screenshot(true) // screenshot
.with_js(true) // evaluate_js, scroll, hover, handle_alert
.with_cookies(false) // Disable cookie tools
.with_frames(false) // Disable frame tools
.with_windows(false) // Disable window tools
.with_actions(false); // Disable advanced actions
let tools = toolset.all_tools();
الاستخدام متعدد المستأجرين مع مجموعات الأدوات المدعومة بالمجمعات
لعمليات النشر متعددة المستأجرين في بيئة الإنتاج، استخدم BrowserToolset::with_pool() جنبًا إلى جنب مع LlmAgentBuilder::toolset(). يحصل كل مستخدم على جلسة متصفح معزولة يتم حلها من المجمع في وقت التشغيل:
use adk_browser::{BrowserSessionPool, BrowserToolset, BrowserConfig, BrowserProfile};
use adk_agent::LlmAgentBuilder;
use std::sync::Arc;
let pool = Arc::new(BrowserSessionPool::new(BrowserConfig::new(), 10));
// Pool-backed toolset — sessions resolved per-user via ctx.user_id()
let toolset = Arc::new(BrowserToolset::with_pool_and_profile(
pool,
BrowserProfile::Scraping,
));
let agent = LlmAgentBuilder::new("web_agent")
.model(model)
.instruction("You are a web research assistant.")
.toolset(toolset)
.build()?;
تبدأ جلسات المتصفح تلقائيًا وتستعيد نفسها تلقائيًا من اتصالات WebDriver القديمة. لم تعد بحاجة إلى استدعاء browser.start() قبل استخدام الأدوات — تبدأ الجلسة بشفافية عند الاستخدام الأول.
الأدوات المتاحة (46 إجمالاً)
التنقل (4 أدوات)
| أداة | الوصف |
|---|---|
browser_navigate | الانتقال إلى URL |
browser_back | العودة في السجل |
browser_forward | التقدم في السجل |
browser_refresh | تحديث الصفحة الحالية |
استخراج (5 أدوات)
| الأداة | الوصف |
|---|---|
browser_extract_text | استخراج النص المرئي من العنصر |
browser_extract_attribute | الحصول على قيمة السمة من العنصر |
browser_extract_links | استخراج جميع الروابط في الصفحة |
browser_page_info | الحصول على URL الحالي والعنوان |
browser_page_source | الحصول على مصدر HTML |
تفاعل (5 أدوات)
| الأداة | الوصف |
|---|---|
browser_click | انقر على عنصر |
browser_double_click | انقر نقرًا مزدوجًا على عنصر |
browser_type | اكتب نصًا في عنصر |
browser_clear | مسح حقل إدخال |
browser_select | حدد خيار القائمة المنسدلة |
انتظار (4 أدوات)
| الأداة | الوصف |
|---|---|
browser_wait_for_element | انتظر ظهور العنصر |
browser_wait | انتظر لمدة معينة |
browser_wait_for_page_load | انتظر تحميل الصفحة |
browser_wait_for_text | انتظر ظهور النص |
لقطات الشاشة (1 Tool)
| الأداة | الوصف |
|---|---|
browser_screenshot | التقاط لقطة شاشة لصفحة أو عنصر |
JavaScript (4 أدوات)
| الأداة | الوصف |
|---|---|
browser_evaluate_js | تنفيذ JavaScript code |
browser_scroll | تمرير الصفحة |
browser_hover | التحويم فوق عنصر |
browser_handle_alert | التعامل مع JavaScript التنبيهات |
ملفات تعريف الارتباط (5 أدوات)
| الأداة | الوصف |
|---|---|
browser_get_cookies | الحصول على جميع ملفات تعريف الارتباط |
browser_get_cookie | الحصول على ملف تعريف ارتباط محدد |
browser_add_cookie | إضافة ملف تعريف ارتباط |
browser_delete_cookie | حذف ملف تعريف ارتباط |
browser_delete_all_cookies | حذف جميع ملفات تعريف الارتباط |
النوافذ/علامات التبويب (8 أدوات)
| الأداة | الوصف |
|---|---|
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 أدوات)
| الأداة | الوصف |
|---|---|
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:
| الخادم | الأمر |
|---|---|
| Selenium (كروم) | docker run -d -p 4444:4444 selenium/standalone-chrome |
| Selenium (فايرفوكس) | 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 check -p adk-browser
cargo check -p adk-rust --no-default-features --features browser
أفضل الممارسات
- استخدام الانتظار: استخدم دائمًا أدوات
browser_wait_*قبل التفاعل مع المحتوى الديناميكي - تقليل لقطات الشاشة: لقطات الشاشة مكلفة؛ استخدمها بشكل استراتيجي
- إغلاق الجلسات: أغلق دائمًا جلسات المتصفح عند الانتهاء
- معالجة الأخطاء: قد تفشل أتمتة المتصفح؛ تعامل مع مهلات الوقت بلطف
- تصفية الأدوات: امنح الوكلاء الأدوات التي يحتاجونها فقط لتقليل التعقيد
السابق: ← الأدوات المدمجة | التالي: أدوات واجهة المستخدم →