Галоўная / Артыкулы / Адаптаванне процесу выкарыстоўвання рэсурса пад заходамі проты ботаў: дзейныя шаблоны

Адаптаванне процесу выкарыстоўвання рэсурса пад заходамі проты ботаў: дзейныя шаблоны

Ліміты швыдкасці, правілы абаранення данных і надзеямыя шляхі запрашэння для прыкладнікаў, якія должны адпаведна збираць публічныя даны.

3962 слоў

У гэтым керавані перадаецца спосаб прыступу да рабочага падходу: «Як абіяцаваць бар’еры проты ботаў для аплікацый, гатовых да выкорыстання». Акцэнт ставіцца на контракты, перакананняя і код, які можна падаць у репозытарый без неабяснення меты. Для загальнага адгледжэння, перш чым зменяць код, неабходна визначыць вхідныя даны, адпаведальнага за крок і критэрыя завершэння. Аперацыёныя працавнікі должны магчымае перадзеўваць крок з вядомага пункта контролю, не спрабоўваючы з’ясаваць захаваны стан. Неабходна аддакументаваць як успішны, так і патэнцыйны падходы. Перапрыбуткі і обробка некоректных паведамленняў ёсць часткай продукту.

Вы — ілюзія чыстага прыгледчыка

Для вас — «Ілюзія чыстага прыгледчыка»: паказвае, як задаць вхідныя даны, абавесніка крока і критэрыя завершэння перад змінайом коду. Аперацыяныя працавнікі должны магчыма ўвайсці крок з вядомага пункта контролю, не спрабоўваючы здагадвацца пра схованы стан. Валіце маленькія, тэставальныя елементы працоўнікаў над вялікімі скрыптамі. Калі крок не выйшаў, прычына неудачы должна вказываць на адну конкрэтную абавесненасць. Валіце простую надзейнасць працоўнікаў пра крэатывныя, але разовыя дамастрыкі.

II — Анатамія негайнага адхоўлення

Для II — Анатамія негайнага адказу, паказваецца неабяжная інфармацыя, адпаведальны за крок і крэтары выходу пры перадзеіснаванні коду. Аператары должны магчымаць перадзеіснаваць крок з вядомага пункта контролю, не спрабоўваючы здагадвацца пра схованы стан. Спрыяйце гэтаму этапу як кантракту межа інфармацыяй, якія ўводзяцца, і перакананым выходным рэзультатам. Даўце назвы артыфактам, паказваецца крэтары успеху і адмовіцеся ад тыхняга частковага завершэння без паведамлення. Валіце надзейнасць працы над красавімя дэманстрацыйнім прыкладам.

III — Пастка «фальшывага» адказу 200

Для III — «Фальшывай» пасткі з адказам 200, перад змянайом код неабяжна задаць вхідныя даны, адпаведнага адпаведальнага за крок і крэтырыя для завершэння. Аперацыёныя працавнікі должны магчымае запускаць крок з вядомай точкі контролю, не спрабоўваючы здагадвацца пра схованы стан. Запісвайце час выконання і витраты разам з функцыйнальнымі рэзултатамі. Відразы ўчасна запобегаюць неспакоўным рахункам у спільных средах. Валіце надзейнасць, якая не выклікае сумневаў, над хітрыми разовымі дэманстрацыямі. Для III — «Фальшывай» пасткі з адказам 200, перад змянайом код неабяжна задаць вхідныя даны, адпаведнага адпаведальнага за крок і крэтырыя для завершэння. Аперацыёныя працавнікі должны магчымае запускаць крок з вядомай точкі контролю, не спрабоўваючы здагадвацца пра схованы стан. Дакументавайце як шлях успеху, так і шлях вярнення. Перапрыбуткі та обработка некоректных паведамленняў є часткай продукту.

// The Lazy Scraping Pattern (Guaranteed to fail at scale)

const axios = require('axios');
async function naiveScrape() {
const targetUrl = 'https://www.amazon.com/s?k=ddr5+ram+128gb';
try {
const response = await axios.get(targetUrl, {
headers: { 'User-Agent': 'Mozilla/5.0…' }
});
console.log("Success! Status:", response.status, "Data Length:",
response.data.length);
} catch (error) {
console.error("Blocked!");
}
}
naiveScrape();
console.log("Does it contain Amazon's soft-block tag?", response.data.includes("a-no-js"));
console.log("First 300 characters of the page code:\n", response.data.substring(0, 300));
const axios = require('axios');
async function naiveScrape() {
// Switching to a Cloudflare-protected target for a clean firewall error
const targetUrl = 'https://www.cnn.com/';
try {

console.log("Initiating naive data extraction request…");
const response = await axios.get(targetUrl, {
headers: {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)
AppleWebKit/537.36'
}
});

console.log("Success! Data Length:", response.data.length);
} catch (error) {
console.error("\n❌ Request Crushed by Anti-Bot Wall.");
if (error.response) {
// This will capture and print the hard 403 error code
console.error(`Status Code: ${error.response.status}`);
console.error(`Status Text: ${error.response.statusText}`);
console.error("Reason: Cloudflare WAF rejected the vanilla Axios
handshake.");
} else {
console.error("Error Message:", error.message);
}
}
}
naiveScrape();

IV — Пераход да аўтаматызаванага шлюза

Для IV — пераходу да автаматызаванага гэйтвейю, паказвайце вхідныя даны, адміністратара крока і крэтырыя выходу пры зміне коду. Аператары должны магчымаць перзапуск крока з вядомай точкі контролю, не спрабоўваючы здагадвацца пра схованы статус. Валіце маленькія, тэставаныя елементы замест большых скрыптов. Калі крок не выйшаў, прычына неудачы павінна адносіцца да адной відповядальнасці. Калі бюджет дазволяе, дадзіце тэст «дыму» для критычнага маршруту ў CI з фіксатрамі.

Крок 1: Актывацыя адказу і стварэнне токена

Для першага: актывацыі абліквоты і стварэння токена, пярэд тым, як зменіць код, неабходна адзначыць вхідныя даны, адпаведальнага за гэты першак і критэрыі завершэння. Аператары должны магчымаць перзапуск гэтага першака з вядомай точкі контролю, не падозрываючы схованы стан. Спрыяйце гэтам этапу як кантракту межа вхіднымі данымі і падтверджанымі выходнымі рэзультатамі. Дайце назвы артыфактам, адзначыце критэрыі успеху і не прабуйце прыймаць часткова завершаную роботу без паведамлення. Як толькі дозволяе бюджет, дадзіце тэст на працяванне критычнага маршруту ў системе CI з викорыстанням фіксатываў.

Першак 2: Тэставанне ўнутрь натыўнае среды

Для 2-го крока: тэставання ў внутранім сераўе, паказвайце вхідныя даны, адпаведальнага за крок і крэтыяры завершэння прычыму змены коду. Аператары должны магчымае перзапускіць крок з вядомай точкі контролю, не падозрываючы прыхованы стан. Запісвайце час выконання і витраты разам з рэзультатамі функцыйнасці. Відразы ўчасе запобегаюць неспакоўным рахункам у спільных средах. Якщо дозволяе бюджет, дадзіце тэст на адпаведнасць критычнаму шляху ў системе CI з фіксатарамі. Для 2-го крока: тэставання ў внутранім сераўе, паказвайце вхідныя даны, адпаведальнага за крок і крэтыяры завершэння прычыму змены коду. Аператары должны магчымае перзапускіць крок з вядомай точкі контролю, не падозрываючы прыхованы стан. Дакументавайце шлях успеху і шлях вярнення разам. Перапрыбуткі і обработка некоректных паведамленняў є часткай продукту.

V — Стварэнне агента LaunchRadar

Для V — стварэння агента LaunchRadar, перш чым зменяць код, неабходна ясная ваказка пра вхідныя даны, адпаведальнага за крок і критэрыя завершэння. Аперацыі должны магчымаць перзапуск кроку з вядомай точкі контролю без неабясненняя схованага стану. Лепш выбіраць маленькія, тэставаныя елементы замест большых скрыптов. Калі крок не выйшоў, прычына неудачы павінна вказываць на адну конкрэтную адпаведальнасць. Ствараць точкі контролю пасля дорогіх крокоў, южы перзапускі не спрацьвоўваюць занова той самы вызов модэлю.

Стварэнне проекту LaunchRadar з нуля

Для стварэння проекта LaunchRadar з нуля, перш чым зменяць код, неабходна ясная ваказка пра вхідныя даны, адпаведальнага за кожны крок і критэрыі завершэння. Аператары должны магчымаць перзапуск кроку з вядомай точкі контролю, не падозрываючы прыхованы стан. Спрыяйце цім этапу як даговору межа вхіднымі данымі і перакананымі выходнымі рэзультатамі. Дайце назвы артыфактам, вакажце критэрыі успеху і не прабуйце прыймаць часткова завершаную роботу без падтверджэння. Напісце кароткі посібнік: як змяніць ключы, спрачысці очакваннія і выконаць атрыбутыцю пасляльніх змян.

# 1. Move directly to your local User Home root path to avoid file syncing errors
cd ~

# 2. Provision a dedicated application folder
mkdir LaunchRadar

# 3. Enter your newly initialized project workspace
cd LaunchRadar

# 4. Initialize an isolated local package architecture
npm init -y

# 5. Tell the Node.js runtime to process modern ES Module imports natively
npm pkg set type="module"
npm install @brightdata/sdk
/**
 * Project: LaunchRadar
 * Core Stack: Node.js + Official Bright Data JavaScript SDK
 */

import { bdclient } from '@brightdata/sdk';

const BRIGHTDATA_KEY = process.env.BRIGHTDATA_API_KEY || '';

async function deployLaunchRadar() {
    // Targeting Product Hunt's active daily launch asset path
    const targetUrl = 'https://www.producthunt.com/';

    console.log("🤖 [LaunchRadar]: Initializing autonomous target ingestion loop...");

    try {
        // Initialize the client gateway via the native constructor
        const client = new bdclient({
            apiKey: BRIGHTDATA_KEY
        });

        console.log("🤖 [LaunchRadar]: Tunneling through Web Unlocker cluster...");

        // Execute the single-step browser-emulated extraction natively
        const htmlResponse = await client.scrapeUrl(targetUrl, {
            zone: 'web_unlocker1',
            format: 'raw' // Streams the target webpage as a raw HTML text string
        });

        console.log("\n=================== PIPELINE SUCCESS ===================");
        console.log(`🤖 [LaunchRadar]: Ingestion complete. Streamed: ${htmlResponse.length} bytes.`);
        console.log("========================================================\n");

        // This will print true-proving your paid credit bypassed the security loop
        const dataIsValid = htmlResponse.includes("Product Hunt");
        console.log(`🤖 [LaunchRadar]: Target Data Authenticated: ${dataIsValid}`);

        // Gracefully disconnect active execution sockets
        await client.close();

    } catch (error) {
        console.error("❌ [LaunchRadar Fatal]: Pipeline exception encountered.");
        console.error(`Reason: ${error.message}`);
    }
}

deployLaunchRadar();

VI — Стварэнне нашага фінальнага прыстрою Vanguard

Для VI — стварэння нашай заканчальной прыемкі аплікацыі Vanguard, пярэд змянайом кода неабходна ўзначыць вхідныя даны, адпаведальнага за крок і критэрыя завершэння. Аператары должны магчымае перайсці канкрэтны крок з вядомага пункта контролю, не спрабоўваючы здагадвацца пра схованы стан. Запісвайце час выконання і витраты разам з функцыйнальнымі рэзултатамі. Вялікі контроль з самага пачатку запобегае неспакоўным рахункам у спільных средах. Стварайце пункты контролю пасля дорогіх крокаў, южы перапрыявкі не будуць практыкуваныя для той самай вызову модэлю. Для VI — стварэння нашай заканчальной прыемкі аплікацыі Vanguard, пярэд змянайом кода неабходна ўзначыць вхідныя даны, адпаведальнага за крок і критэрыя завершэння. Аператары должны магчымае перайсці канкрэтны крок з вядомага пункта контролю, не спрабоўваючы здагадвацца пра схованы стан. Дакументавайце як шлях успеху, так і шлях вяснавання проблем. Перапрыявкі і обработка некоректных паведамленняў ёсць часткай продукту.

npm install cheerio
const htmlResponse = await client.scrapeUrl(targetUrl, {
zone: "web_unlocker1",
format: "raw",
country: "us",
dataFormat: "html"
});
/**
* Project: Vanguard Agent
* Function: Autonomous CNN Trend & Headline Generator
* Core Stack: Node.js (ESM) + Official Bright Data JavaScript SDK + Cheerio
*
* IMPORTANT: CNN's own robots.txt disallows /search (Disallow: /search),
* so Bright Data's Web Unlocker refuses it in immediate-access mode —
* that's not a bug, it's the site opting out of that specific path for
* compliant bots. Instead, this hits CNN's own News Sitemap
* (https://www.cnn.com/sitemap/news.xml), which robots.txt explicitly
* lists as a Sitemap: entry — meaning it's meant to be fetched by bots.
* It contains real headline titles and real publish timestamps for the
* last ~48 hours of coverage across every section, which is arguably a
* better fit for "trend monitoring" than a search page anyway.
*/

import fs from 'fs';
import readline from 'readline';
import * as cheerio from 'cheerio';
import { bdclient } from '@brightdata/sdk';
const REPORT_FILE = 'vanguard_trend_report.md';
const CNN_NEWS_SITEMAP = 'https://www.cnn.com/sitemap/news.xml';

// Key comes ONLY from the environment - no hardcoded fallback, ever.
// If a real key has been pasted into a file, a chat, or a log at any
// point, treat it as compromised and rotate it in your Bright Data
// dashboard immediately, even after removing it from the code.

const BRIGHTDATA_KEY = process.env.BRIGHTDATA_API_KEY || '';
if (!BRIGHTDATA_KEY) {
    console.error(
        "\n❌ [Vanguard Config Error] BRIGHTDATA_API_KEY is not set.\n" +
        "   Run it like this instead:\n\n" +
        "   PowerShell:   $env:BRIGHTDATA_API_KEY=\"your_actual_key\"; node vanguard.mjs\n" +
        "   cmd.exe:      set BRIGHTDATA_API_KEY=your_actual_key && node vanguard.mjs\n" +
        "   macOS/Linux:  BRIGHTDATA_API_KEY=your_actual_key node vanguard.mjs\n"
    );
    process.exit(1);
}

// CNN article URLs follow /YYYY/MM/DD/category/slug - used here purely to
// derive a topic category for the breakdown, not for date (the sitemap
// gives us a real publish timestamp directly).
const CNN_ARTICLE_PATTERN = /^\/(\d{4})\/(\d{2})\/(\d{2})\/([a-z0-9-]+)\//i;
const printDashboardHeader = () => {
    console.clear();
    console.log("\x1b[38;5;39m%s\x1b[0m", " ┌────────────────────────────────────────────────────────┐");
    console.log("\x1b[38;5;39m%s\x1b[0m", " │   VANGUARD INTELLIGENCE SERVICE // CNN TREND ENGINE     │");
    console.log("\x1b[38;5;39m%s\x1b[0m", " └────────────────────────────────────────────────────────┘");
};

const promptUser = (queryMessage) => {
    const interfaceInstance = readline.createInterface({
        input: process.stdin,
        output: process.stdout
    });
    return new Promise((resolve) => {
        interfaceInstance.question(queryMessage, (inputAnswer) => {
            interfaceInstance.close();
            resolve(inputAnswer.trim());
        });
    });
};

function escapeRegExp(string) {
    return string.replace(/[.*+?^${}()|[\]\\]/g, '\\amp;');
}

function categoryFromUrl(loc) {
    try {
        const path = new URL(loc).pathname;
        const dated = path.match(CNN_ARTICLE_PATTERN);
        if (dated) return dated[4].replace(/-/g, ' ');
        // Some CNN URLs skip the date prefix entirely (e.g. video pages
        // like /politics/video/slug). Fall back to the first path segment
        // instead of dumping everything into "uncategorized".
        const segment = path.split('/').filter(Boolean)[0];
        return segment ? segment.replace(/-/g, ' ') : 'uncategorized';
    } catch {
        return 'uncategorized';
    }
}

async function deployVanguardService() {
    printDashboardHeader();
    console.log("\x1b[38;5;244m%s\x1b[0m", "\n [CONFIGURE INTELLIGENCE FILTER]");
    const searchQuery = await promptUser('🔍 Enter a keyword to filter recent CNN headlines (e.g., startup, election, climate): ');
    if (!searchQuery) {
        console.error("\n❌ [Vanguard Error] Input token context empty. Pipeline aborted.");
        return;
    }
    printDashboardHeader();
    console.log(`\n\x1b[38;5;214m🤖 [Vanguard]: Connecting to proxy fabric for target: ${CNN_NEWS_SITEMAP}\x1b[0m`);
    console.log("🤖 [Vanguard]: Initializing automated browser emulation...");
    const client = new bdclient({ apiKey: BRIGHTDATA_KEY });
    try {
        // dataFormat: 'html' returns the raw response body as-is, which
        // works fine for XML too - we just parse it with cheerio's XML
        // mode below instead of treating it as an HTML page.
        const xmlResponse = await client.scrapeUrl(CNN_NEWS_SITEMAP, {
            zone: 'web_unlocker1',
            dataFormat: 'html',
            country: 'us'
        });
        console.log(`\x1b[38;5;46m🤖 [Vanguard]: Data stream ingestion complete. Length: ${xmlResponse.length} bytes.\x1b[0m`);        if (!xmlResponse || xmlResponse.length < 500) {            const preview = xmlResponse ? xmlResponse.slice(0, 300) : '(empty response)';            throw new Error(                `Target returned only ${xmlResponse ? xmlResponse.length : 0} bytes - this is too small to be ` +                `a real sitemap. Raw response below:\n\n${preview}\n\n` +                `Checklist:\n` +                `  1. Confirm BRIGHTDATA_API_KEY is a valid, active key.\n` +                `  2. Confirm 'web_unlocker1' matches an active Web Unlocker zone name in your ` +                `Bright Data dashboard - zone names are account-specific.\n` +                `  3. If the text above mentions a block/captcha, retry in a moment or try a ` +                `different 'country' value.`            );        }        console.log("🤖 [Vanguard]: Processing resilient extraction analytics...");        // xmlMode: true keeps namespaced tags (e.g. news:title) intact        // instead of cheerio's default HTML-parsing/lowercasing behavior.
        const $ = cheerio.load(xmlResponse, { xmlMode: true });
        const insights = [];
        $('url').each((_, el) => {
            const loc = $(el).find('loc').first().text().trim();
            const title = $(el).find('news\\:title').first().text().trim();
            const pubDateRaw = $(el).find('news\\:publication_date').first().text().trim()
                || $(el).find('lastmod').first().text().trim();
            if (!loc || !title) return; // skip entries without a real headline (e.g. galleries/video-only)
            insights.push({
                title: title.replace(/\s+/g, ' '),
                date: pubDateRaw ? pubDateRaw.slice(0, 10) : 'unknown',
                category: categoryFromUrl(loc),
                postUrl: loc
            });
        });
        const uniqueRawInsights = Array.from(new Map(insights.map(item => [item.postUrl, item])).values());
        // Sort newest first using the sitemap's own publish timestamp.        uniqueRawInsights.sort((a, b) => (a.date < b.date ? 1 : a.date > b.date ? -1 : 0));        // Whole-word match, not substring - plain .includes() would match        // "war" inside "Warner" or "warrant", which are false positives        // for a search on "war". \b enforces a real word boundary.        const keywordPattern = new RegExp(`\\b${escapeRegExp(searchQuery)}\\b`, 'i');        let filteredInsights = uniqueRawInsights.filter(item => keywordPattern.test(item.title));        // Phase 2: fallback to the newest overall headlines if no direct match        let isFallbackMode = false;        if (filteredInsights.length === 0) {            filteredInsights = uniqueRawInsights;            isFallbackMode = true;        }        const uniqueInsights = filteredInsights.slice(0, 10);        if (uniqueInsights.length === 0) {            throw new Error('Zero real headline entries isolated inside the sitemap buffer.');        }        const categoryCounts = uniqueRawInsights.reduce((acc, item) => {            acc[item.category] = (acc[item.category] || 0) + 1;
            return acc;
        }, {});
        const topCategories = Object.entries(categoryCounts)
            .sort((a, b) => b[1] - a[1])
            .slice(0, 5);
        console.log("\n\x1b[38;5;51m┌────────────────────────────────────────────────────────────────────────┐");
        console.log(`│ ► VANGUARD INTELLIGENCE STREAM // CNN // '${searchQuery}'`.padEnd(76, ' ') + '│');
        console.log("└────────────────────────────────────────────────────────────────────────┘\x1b[0m");
        if (isFallbackMode) {
            console.log(`\x1b[33m ⚠️ [Notice] No direct matches for '${searchQuery}'. Showing newest CNN headlines instead.\x1b[0m\n`);
        }
        uniqueInsights.forEach((item, index) => {
            console.log(` \x1b[38;5;46m[${String(index + 1).padStart(2, '0')}]\x1b[0m \x1b[1m${item.title.substring(0, 75)}\x1b[0m`);
            console.log(`     ├─ Category : ${item.category}`);
            console.log(`     ├─ Date     : ${item.date}`);
            console.log(`     └─ Link     : \x1b[38;5;39m\x1b[4m${item.postUrl}\x1b[0m\n`);
        });
        console.log("\x1b[38;5;51m└────────────────────────────────────────────────────────────────────────┘\x1b[0m");
        console.log('\x1b[38;5;244m📊 Top categories in this result set:\x1b[0m');
        topCategories.forEach(([cat, count]) => console.log(`   • ${cat} (${count})`));
        const markdownReport = [
            `# Vanguard CNN Intelligence Digest`,
            `* **Search Keyword:** \`${searchQuery}\``,
            `* **Source:** CNN News Sitemap (robots.txt-approved)`,
            `* **Data Capture Status:** ${isFallbackMode ? 'Newest-headlines fallback' : 'Direct keyword match'}`,
            `* **Timestamp:** ${new Date().toISOString()}`,
            `\n## Top Categories`,
            ...topCategories.map(([cat, count]) => `* **${cat}** - ${count} article(s)`),
            `\n## Headlines`,
            ...uniqueInsights.map((p, idx) =>
                `### ${idx + 1}. ${p.title}\n* **Date:** ${p.date}\n* **Category:** ${p.category}\n* **Link:** [${p.postUrl}](${p.postUrl})`
            )
        ].join('\n');
        fs.writeFileSync(REPORT_FILE, markdownReport, 'utf8');
        console.log(`\x1b[38;5;46m💾 [Vanguard] System Report written successfully -> ${REPORT_FILE}\x1b[0m\n`);
    } catch (pipelineException) {
        console.error("\n❌ [Vanguard Fatal]: Operational routine aborted.");
        console.error(`Reason: ${pipelineException.message}`);
    } finally {
        await client.close();
    }
}
deployVanguardService();

VII — Адхіленне ад тэхнічнага адтрымання проты-ботаў

Для VII — Адаптаванне пасля тыямоў проты ботаў, перад зменай коду неабходна задаць вхідныя даны, адпаведальнага за крок і критэрыя завершэння. Аперацыёныя працавнікі должны магчымае перайсці на гэты крок з вядомага пункта контролю, не спрабоўваючы здагадвацца пра схованы стан. Лепш выбіраць маленькія, тэставаныя елементы замест большых скрыптаў. Калі крок не выйшоў, прычына неудачы должна вказываць на адну конкрэтную адпаведальнасць. Лепш выбіраць простую надзеямасць замест крэатыўных, але разовых дэманстрацый.

Часта задаваемыя запитанні

Для часта задаваемых запитанняў, перад зменай коду неабходна задаць вхідныя даны, адпаведальнага за крок і критэрыя завершэння. Аперацыёныя працавнікі должны магчымае перайсці на гэты крок з вядомага пункта контролю, не спрабоўваючы здагадвацца пра схованы стан. Спрыяйце цэму этапу як кантракту межа вхіднымі данымі і перакананымі выходнымі рэзультатамі. Назвайце всі элементы, задаць критэрыя успеху і адмовіцеся ад тыхняе частковага завершэння без паведамлення. Лепш выбіраць простую надзеямасць замест крэатыўных, але разовых дэманстрацый.

Чы можа Can Web Unlocker адзьябляць веб-сайты з большым колькам JavaScript?

Каб выявіць, чы можа Can Web Unlocker адзьябляць веб-сайты з большым колькам JavaScript, прайшліце да таго, каб перад змянайом коду былі ваказаны вхідныя даны, адпаведальныя за кожны крок і критэрыі завершэння. Аператары должны магчымаць перайсці за крок з вядомай точкі контролю без неабясненняя схованага стану. Запішыце час выконання і вартасць праз тэкст функцыональных рэзультатаў. Відразліва візуалізацыя запобегае неспакоўным рахункам у спільных средах. Закрепіце версіі пад час выконання і запішыце резюмэ, яке выканало дамэ-выпробаванне. Каб выявіць, чы можа Can Web Unlocker адзьябляць веб-сайты з большым колькам JavaScript, прайшліце да таго, каб перад змянайом коду былі ваказаны вхідныя даны, адпаведальныя за кожны крок і критэрыі завершэння. Аператары должны магчымаць перайсці за крок з вядомай точкі контролю без неабясненняя схованага стану. Дакументавайце як успішны, так і варыянты вярнення да нормальнага стану. Перапрыбуткі і обработка некоректных паведамленняў ёсць часткай продукту.

Чы вам яшчэ трэба ручна зміняць проксі?

Для запиту «Чы гэтакі працяўнікі яшчэ трэба ротавацыя ўручну?» неабходна пазначыць параметры, власніка крока і критэрыя завершэння пры зміне коду. Аперацыйныя працавнікі должны магчымае перзапускаць крок з вядомай точкі контролю, не падозрываючы прыхованы стан. Лепш выбіраць маленькія, тэставаныя елементы замест амаль неканчатых скрыптав. Калі крок не выйшоў, прычына неудачы должна вказываць на адну конкрэтную адпаведальнасць. Калі дозволяе бюджет, у системе CI з фіксатрамі трэба дадаць тэст на адпаведнасць критычнай схеме.

Можна ліцэўваць гэтую архітектуру для АІ-агентаў?

Для пыткі «Можнаце вы использоваць гэту архітектуру для АІ-агентаў?» паказваецца, калі трэба задаць вхідныя даны, адпаведальнага за крок і критэрыя завершэння пры перадзмене коду. Аперацыйныя працоўнікі должны магчымае запускаць крок з вядомай точкі контролю без адгадванняя схованага стану. Спрыятлівае ставленне да гэтага этапу як да кантракту межа вхіднымі данымі і падтвердзенымі выходнымі рэзультатамі. Называйце артыфакты, задаюце пераканальнія критэрыя і не прабуйце прыйняць часткова завершаную роботу без паведамлення. Зберагаюце стан графа ў простам і типаваным формате. Вярнутыя структуры маскуюць, який вузел запісаў кожны поле, і спакоююць возз'еднанне пасля перарываў.

Можнаце расшырыць Vanguard на іншыя веб-сайты?

Для пыткі «Чы можна расшырыць Vanguard на іншыя веб-сайты?» паказваецца, каб перад змянай коду былі вызначены вхідныя даны, адпаведальны за крок і критэрыі завершэння. Аператары должны магчымаць перзапуск крока з вядомай точкі контролю, не спрабоўваючы здогадвацца пра схованы стан. Запісвайце час выконання і витраты праза функцыйнальныя рэзултаты. Відразы ўчасна запобегаюць неспакоўным рахункам у спільных средах. Калі дозволяе бюджет, дадзіце тэст на працяснасць критычнага шляху ў CI з фіксатарамі. Для пыткі «Чы можна расшырыць Vanguard на іншыя веб-сайты?» паказваецца, каб перад змянай коду былі вызначены вхідныя даны, адпаведальны за крок і критэрыі завершэння. Аператары должны магчымаць перзапуск крока з вядомай точкі контролю, не спрабоўваючы здагадвацца пра схованы стан. Дакументавайце як успішны, так і варыянт вяснавання проблемы. Перапрыбуткі і обробка некоректных паведамленняў є часткай продукту.

Чэрніця аператыўных дзеянняў

Для канцэларскага чак-ліста, пры змяне коду, неабходна ясная ваказка пра вхідныя даны, адміністратара крока і крэтэрыяў завершэння. Аперацыйныя працавнікі павінны магчыма ўвайсці крок з вядомага пункта контролю, не спрабоўваючы здагадвацца пра схованы стан.

Конфігурацыю трэба зберагаць празай аплікацыйскага коду. Файлы серавэра, хранільнікі секретных дадзеных і флагі функцыйяў павінны знаходзіцца ў адном месцы, якое можа буць пераглянутае аперацыйнымі працавнікамі.

Пры наявнасці бюджэту, у системе CI трэба дадаць тэст на працяснасць критычнага маршруту з викорыстанням фіксатываў.

Запісваць час выканання і вартасць разам з функцыональнымі рэзультатамі. Раннія відкрытасць запобегае неспакою ў спальнаваных серавэрах.

Валідзіце надзейнасць, а не крэатыўныя, ендзэврацыйныя дэманстрацыі.

Спрыймайце гэты этап як кантракт між вхіднымі данымі і перакананымі выходнымі рэзультатамі. Называйце артыфакты, вакажыце крэтэрыяў успеху і адмовляйцеся ад тыхнай частковай, непазначанай завершэння.

Перш чым запускать працю системы, заморозьце версіі, зафіксавце «золаты» транскрыпты для критичнага шляху і паказвце способы вярнення да пачатковага стану. У спільных средах неабяжна наявнае ліміты частоты запуска, пераконтроль стану абонентаў і чыстае вяліканства для змены секрэтных даных.

Для павышэння надзеі, пры нотацыі 0, паказвайце вхідныя даны, абоўязкі адпаведнага спецыяліста і критэрыя завершэння працы перш чым зменіце код. Аператары должны магчыма было перзапускці цей крок з вядомага пункта контролю, не прыпускаючы стану, які залишаецца незрозумелым.

Валідзіце маленькія, тэставаныя елементы замест абмежлёных скрыптав. Калі крок не выйшаў, прычына неудачы павінна вказываць на аднойчы абоўязак.

Як толькі дазволяе бюджет, дадзіце тэст на працяснасць для критичнага шляху ў системе CI з викорыстанням фіксатараў.

Для павышэння надзеі, пры нотацыі 1, паказвайце вхідныя даны, абоўязкі адпаведнага спецыяліста і критэрыя завершэння працы перш чым зменіце код. Аператары должны магчыма было перзапускці цей крок з вядомага пункта контролю, не прыпускаючы стану, які залишаецца незрозумелым.

Запісвайце часы выконання і расходы праз функцыйнальныя рэзултаты. Відразлівая інформацыю з самага пачатку, можна ухіліцца ад неспакоўных рахункоў у спільных средах.

Напісце кароткі путаводзь: роўнараднайце канты, апустіце чергі, выконайце атрыбуцыю пасляльніх змян.

Для захоўкі стабільнасі, па прыметцы 2, перад зменай коду неабходна адзначыць вхідныя даны, адпаведальнага за крок і критэрыя завершэння. Аперацыйныя працавнікі должны магчыма было перазваляць крок з вядомай точкі контролю, не падозрываючы прыхованы стан.

Документавайце як шлях успеху, так і шлях вяснавання. Перапрыбуткі і обробка некоректных паведамленняў ёсць часткай продукту.

Волійце простую надзейнась у працы, чым крэатывныя, але разовыя дамастанкі.

Для захоўкі стабільнасі, па прыметцы 3, перад зменай коду неабходна адзначыць вхідныя даны, адпаведальнага за крок і критэрыя завершэння. Аперацыйныя працавнікі должны магчыма было перазваляць крок з вядомай точкі контролю, не падозрываючы прыхованы стан.

Спрытваце гэты этап як кантракт межа вхіднымі дадзеннямі і паверыранымі выходнымі рэзультатамі. Дайце назвы артыфактам, задаце критэрыя успеху і не прымайце часткова завершэння без паведамлення.

Калі дозволяе бюджет, дадзіце тэст для перагляду критычнай сябры ў процесе CI з викорыстанням фіксатароў.

Для павышэння надзеі, прыказанай у заўважэнні 4, перад змянай коду задаце вхідныя дадзення, адпаведальнага за крок і критэрыя завершэння. Аператары должны магчымае перадзваніць крок з вядомай точкі контролю, не спадзяючыся на захаваны стан.

Зберагаце настройкі праз аплікацыйны код. Файлы сераўедовашча, хранільнікі секрэтных дадзенняў і флагі функций должны знаходзіцца ў аднам месцы, якое можна пераглядаць аператарамі.

Напісце кароткі посібнік: роўнаць ключы, апустошыць кялі, выконаць адвёрсныя змены.

Для павышэння надзеі, прыказанай у заўважэнні 5, перад змянай коду задаце вхідныя дадзення, адпаведальнага за крок і критэрыя завершэння. Аператары должны магчымае перадзваніць крок з вядомай точкі контролю, не спадзяючыся на захаваны стан.

Лепшыя маленькія, тэставаныя елементы, чым велікія скрыпты. Калі якісь крок не выйшае, адказнасць за гэта падзея должна быць чыстаю.

Лепшая надзейна працэйнасць, чым хітрыя разовыя дамэ.

Для павышэння надзейнасці, як зазначае прымечанне 6, неабяжна практычна апісацыя вхідных дадзеных, адпаведальнага за крок і крэтарыяў завершэння працы перад змінайом коду. Аператары должны магчымаць перайскадзіць крок з вядомага пункта контролю, не спрабоўваючы здагадвацца пра схованы стан.

Запісваюць час выконання і витраты разам з функцыйнальнымі рэзултатамі. Вочны контроль з самага пачатку запобегае неспакоўным рашчытам у спільных средах.

Калі бюджет дазволяе, дадзейсніце тэст на працэйнасць критычнага шляху ў системе CI з викорыстанням фіксатываў.

Для павышэння надзейнасці, як зазначае прымечанне 7, неабяжна практычна апісацыя вхідных дадзеных, адпаведальнага за крок і крэтарыяў завершэння працы перад змінайом коду. Аператары должны магчымаць перайскадзіць крок з вядомага пункта контролю, не спрабоўваючы здагадвацца пра схованы стан.

Запісвайце адзіночна і шлях вярнення ў нормальны стан. Практыкі павторных спроб і обработка некоректных паведамленняў ёсць часткай продукту.

Напішыце кароткі посібнік: роўнарадна зменяйце кантрольныя клучы, апошчаджвайце чергі, вярніце стан да пасляпэўнай змены.

Для прыемаў павышэння надзеямоўасці, пры пунктазе 8, абявіце вхідныя даны, адпаведальнага за крок і критэрыя завершэння пры змены коду. Аперацыйныя працавнікі павінны магчымае перапрацаваць крок з вядомай точкі контролю, не спадзяваючыся на скрыты стан.

Спрацаввайце гэтый этап як кантракт межа вхіднымі данымі і перакананымі выходнымі рэзультатамі. Даць назвы артыфактам, абявіце критэрыя успеху і не прабывайце прыймаць часткова завершаныя рэзультаты без падтверджэння.

Валіце надзеямоўасць, адпаведную простай надзеямоўасці, а не крэатыўным разовым дамастраванням.

Для прыемаў павышэння надзеямоўасці, пры пунктазе 0, абявіце вхідныя даны, адпаведальнага за крок і критэрыя завершэння пры змены коду. Аперацыйныя працавнікі павінны магчымае перапрацаваць крок з вядомай точкі контролю, не спадзяваючыся на скрыты стан.

Запісвайце адно часовы лянцюг успеху і лянцюг вярнення. Прабавы і обработка паказакоў пра немагчымасць адправкі ёсцю часткая продукту.

Валіце надзейнае функцыонаванне праўдзепад з крэатівнымя дамаваннямі.

Для пункта 1 пра змяцненне абявы визначайце вхідныя даны, адпаведальнага за крок і критэрыя завершэння пры зміне коду. Аперацыйныя працавнікі павінны магчыма быць перадзвануць крок з вядомага пункта контролю без адгадванняя схованага стану.

Спрыятлівайце гэты этап як кантракт межа вхіднымі данымі і паверканымі выходнымі рэзультатамі. Даўайце назвы артыфактам, визначайце перагляды успеху і адмовіцеся ад тыхоўскага частковага завершэння.

Як толькі дазволяе бюджэт, дадзіце тэст на працы критычнага лянцюга ў CI з фіксатарамі.