
وكيل كشط لواجهات برمجة تطبيقات الويب
قم بالهندسة العكسية لواجهة API الداخلية لأي موقع ويب باستخدام اللغة الطبيعية
تُحمِّل المواقع الحديثة البيانات عبر استدعاءات AJAX خفية:
يحلل Strot المواقع ويكتشف استدعاءات واجهاتها البرمجية الداخلية نيابةً عنك.
ما الذي يفعله Strot فعليًا:
احصل على تجربة Strot الكاملة (واجهة الويب + API) فورًا:
باستخدام متصفح Patchright
docker run -d --name browser-server -p 5678:5678 synacktra/patchright-headless-server
STROT_ANTHROPIC_API_KEY=sk-ant-apiXXXXXX \
docker compose -f https://raw.githubusercontent.com/vertexcover-io/strot/refs/heads/main/docker-compose.yml up
أو باستخدام متصفح Steel
STROT_BROWSER_WS_URL=wss://connect.steel.dev?apiKey=ste-XXXXXX STROT_ANTHROPIC_API_KEY=sk-ant-apiXXXXXX \
docker compose -f https://raw.githubusercontent.com/vertexcover-io/strot/refs/heads/main/docker-compose.yml up
ثم قم بزيارة:
pip install strot
أو باستخدام uv:
uv pip install strot
import strot
import asyncio
from pydantic import BaseModel
class Review(BaseModel):
title: str | None = None
username: str | None = None
rating: float | None = None
comment: str | None = None
date: str | None = None
async def get_reviews():
# Strot discovers the internal API that loads reviews
source = await strot.analyze(
url="https://www.getcleanpeople.com/product/fresh-clean-laundry-detergent/",
query="Customer reviews with ratings and comments",
output_schema=Review,
code_executor="e2b" # Defaults to "unsafe"
)
# Use the same API call the website uses, with full parameter control
async for reviews in source.generate_data(limit=500, offset=100, sortBy="date desc"):
for review in reviews:
print(f"{review['rating']}⭐ by {review['username']}: {review['comment']}")
if __name__ == "__main__":
asyncio.run(get_reviews())
import strot
import asyncio
from pydantic import BaseModel
class Product(BaseModel):
name: str | None = None
price: float | None = None
rating: float | None = None
availability: str | None = None
description: str | None = None
async def get_products():
# Strot finds the AJAX endpoint that loads product listings
source = await strot.analyze(
url="https://blinkit.com/cn/fresh-vegetables/cid/1487/1489",
query="Listed products with names and prices.",
output_schema=Product
)
# Set code executor of your choice into source
source.set_code_executor("e2b")
# Access all products with custom filtering and sorting
async for products in source.generate_data(limit=100, offset=0, category="vegetables", sortBy="price"):
for product in products:
print(f"{product['name']}: ${product['price']} ({product['rating']}⭐)")
if __name__ == "__main__":
asyncio.run(get_products())
يوفر Strot خادم MCP (بروتوكول سياق النموذج) يمكّن عملاء MCP مثل Claude من تحليل المواقع واكتشاف واجهاتها البرمجية الداخلية مباشرة.
git clone https://github.com/vertexcover-io/strot.git
cd strot && uv sync --group mcp
قم بتعيين متغيرات البيئة:
export STROT_ANTHROPIC_API_KEY=sk-ant-apiXXXXXX
export STROT_BROWSER_MODE_OR_WS_URL=headless # or 'headed' or ws://browser-url
إذا كنت تريد استخدام متصفح مستضاف، يمكنك القيام بما يلي:
شغّل خادمًا بدون واجهة رسومية داخل docker
docker run -d --name browser-server -p 5678:5678 synacktra/patchright-headless-server
export STROT_BROWSER_MODE_OR_WS_URL=ws://localhost:5678/patchright
أو الاتصال بخادم متصفح بعيد:
export STROT_BROWSER_MODE_OR_WS_URL=wss://...
$ uv run strotmcp
Usage: strotmcp COMMAND
╭─ Commands ─────────────────────────────────────────────╮
│ http Start an http server. │
│ sse Start an sse server. │
│ stdio Start a stdio server. │
│ streamable-http Start a streamable http server. │
╰────────────────────────────────────────────────────────╯
ناقل stdio
claude mcp add strot-mcp "uv run strotmcp stdio" --transport stdio \
--env STROT_ANTHROPIC_API_KEY=$STROT_ANTHROPIC_API_KEY STROT_BROWSER_MODE_OR_WS_URL=$STROT_BROWSER_MODE_OR_WS_URL
نواقل sse وhttp وstreamable-http
شغّل خادم MCP بالناقل المطلوب في طرفية منفصلة:
uv run strotmcp sse --port 8888
# uv run strotmcp http --host 0.0.0.0
# uv run strotmcp streamable-http --host 127.0.0.1 --port 8777
أضف خادم MCP إلى Claude:
claude mcp add strot-mcp http://127.0.0.1:8888/sse --transport sse
اختبر وتحقق من دقة تحليل Strot عبر مواقع مختلفة ومكونات فردية. يدعم نظام التقييم خمسة أنواع من المدخلات:
يقارن النتائج الفعلية بالنتائج المتوقعة، ويتتبع مقاييس مثل مطابقة عنوان URL المصدر، واكتشاف مفتاح الترقيم، واكتشاف المعاملات الديناميكية، ودقة عدد الكيانات. تُخزَّن جميع التقييمات وخطوات التحليل التفصيلية في Airtable.
git clone https://github.com/vertexcover-io/strot.git
cd strot && uv sync --group eval
أنشئ قاعدة Airtable جديدة:
Create في مساحة العمل المطلوبةBuild an app on your ownappXXXXXXXXXXXXXX)أنشئ رمز وصول شخصيًا:
/create/tokensdata.records:readdata.records:writeschema.bases:readschema.bases:writeCreate token وانسخ الرمز (مثل patXXXXXXXXXXXXXX)قم بتعيين متغيرات البيئة:
ملاحظة: يتم إنشاء الجداول المطلوبة تلقائيًا بالمخطط المناسب عند تشغيل التقييمات.
$ uv run stroteval
Usage: stroteval [OPTIONS]
Evaluate multiple job-based or task-based inputs from a file or stdin.
╭─ Parameters ──────────────────────────────────────────────────────────────────╮
│ --file -f Path to the JSON/JSONL file. If not provided, reads from stdin. │
╰───────────────────────────────────────────────────────────────────────────────╯
تأكد من أن خادم API قيد التشغيل إذا كنت تقيّم مدخلات قائمة على المهام.
echo '[
{
"job_id": "existing-job-uuid",
"expected_source": "https://api.example.com/reviews",
"expected_pagination_keys": ["cursor", "limit"],
"expected_dynamic_keys": ["sortBy", "category"],
"expected_entity_count": 243
},
{
"site_url": "https://example.com/category/abc",
"query": "Listed products with name and prices",
"expected_source": "https://api.example.com/products",
"expected_pagination_keys": ["limit", "offset"],
"expected_dynamic_keys": ["category", "sortBy"],
"expected_entity_count": 100
},
{
"request": {
"method": "GET",
"url": "https://example.com/api/products",
"type": "ajax",
"queries": {"page": "2", "limit": "50", "sortBy": "price", "category": "electronics"}
},
"expected_pagination_keys": ["page", "limit"],
"expected_dynamic_keys": ["sortBy", "category"]
},
{
"response": {
"value": "",
"request": {
"method": "GET",
"url": "https://example.com/api/reviews",
"type": "ajax"
},
"preprocessor": {"element_selector": ".reviews-container"}
},
"output_schema_file": "review_schema.json",
"expected_entity_count": 10
}
]' | uv run stroteval
ترخيص MIT - استخدمه كيفما تشاء!
صُنع بكل ❤️ بواسطة Vertexcover Labs
export STROT_AIRTABLE_BASE_ID=appXXXXXXXXXXXXXX
export STROT_AIRTABLE_TOKEN=patXXXXXXXXXXXXXX
# set the following if you wish to evaluate separate tasks
export STROT_ANTHROPIC_API_KEY=sk-ant-apiXXXXXX