কীভাবে জাভাস্ক্রিপ্ট-ভিত্তিক পেজার ওয়েবসাইটগুলি নেভিগেট করবেন এবং লিঙ্কগুলি সংগ্রহ করবেন

Pagination

জাভাস্ক্রিপ্ট-ভিত্তিক পেজিনেশন এবং API চ্যালেঞ্জ বোঝা

জাভাস্ক্রিপ্ট-ভিত্তিক পেজিনেশন সহ ওয়েবসাইটগুলি দর্শকদের জন্য উপাদানের মাধ্যমে নেভিগেট করা কঠিন করে তুলতে পারে, বিশেষ করে যদি পৃষ্ঠা সংখ্যা নিয়ন্ত্রণ কোনো URL প্যারামিটার প্রকাশ না করে। এটি ইউআরএল ক্যোয়ারী পরিবর্তন করার মতো প্রচলিত পদ্ধতি ব্যবহার করে পৃষ্ঠা নেভিগেশন পরিবর্তন বা স্বয়ংক্রিয় করা অসম্ভব করে তোলে। বিভিন্ন পদ্ধতির মাধ্যমে এই ধরনের পেজারদের সাথে জড়িত হওয়া সম্ভব।

এই ধরনের ওয়েবসাইট থেকে লিঙ্ক বা ডেটা পুনরুদ্ধার করার চেষ্টা করার সময় এই ধরনের একটি সমস্যা দেখা দেয়। আপনি ম্যানুয়ালি শত শত পৃষ্ঠা নেভিগেট করতে অক্ষম হলে, জাভাস্ক্রিপ্ট পেজারে ক্লিক ইভেন্ট অনুকরণ করা একটি ভাল পদ্ধতি। এই প্রযুক্তিটি নেভিগেশন পদ্ধতিকে স্বয়ংক্রিয় করে, ডেটা সংগ্রহের দায়িত্বকে ব্যাপকভাবে সরল করে।

কিছু পরিস্থিতিতে, ব্রাউজারের ডেভেলপার টুলের "নেটওয়ার্ক" ট্যাব API এন্ডপয়েন্ট প্রদর্শন করতে পারে যা দরকারী তথ্য প্রদান করে। যাইহোক, এই এন্ডপয়েন্টগুলির সাথে সরাসরি জড়িত থাকার ফলে মাঝে মাঝে সমস্যা হতে পারে কারণ তারা নির্দিষ্ট HTTP পদ্ধতিগুলিকে অনুমতি দেয় না, যেমন GET অনুরোধগুলি, যা সাধারণত ডেটা পুনরুদ্ধার করতে ব্যবহৃত হয়।

এই নিবন্ধটি ব্যাখ্যা করে যে কীভাবে একটি ওয়েবসাইটের জাভাস্ক্রিপ্ট পেজারে ক্লিক ইভেন্টগুলিকে অনুকরণ করতে হয় এবং কীভাবে API সীমাবদ্ধতাগুলি মোকাবেলা করতে হয় যা আপনার প্রয়োজনীয় ডেটাতে সরাসরি অ্যাক্সেস সীমাবদ্ধ করে। আপনি কার্যকরভাবে সমস্ত গুরুত্বপূর্ণ তথ্য সংগ্রহ করেন তা নিশ্চিত করতে আমরা নির্দিষ্ট API পদ্ধতিতে সীমাবদ্ধতার কাছাকাছি কাজ করার উপায়গুলিও দেখব।

আদেশ ব্যবহারের উদাহরণ
document.querySelector() এই পদ্ধতিটি একটি প্রদত্ত CSS নির্বাচকের সাথে মেলে এমন প্রথম উপাদান নির্বাচন করতে ব্যবহৃত হয়। স্ক্রিপ্ট এটি ব্যবহার করে পেজিনেশন কন্টেইনার (const pagerContainer = document.querySelector('.pagination')) বেছে নিতে এবং পেজার বোতাম নিয়ন্ত্রণ করতে।
Array.from() একটি অ্যারের মতো বা পুনরাবৃত্তিযোগ্য বস্তুকে একটি সঠিক অ্যারেতে রূপান্তর করে। সহজে ম্যানিপুলেশন এবং ম্যাপিংয়ের জন্য স্ক্রিপ্টটি বিজ্ঞাপন লিঙ্কগুলির একটি নোডলিস্টকে একটি অ্যারেতে রূপান্তর করে (Array.from(document.querySelectorAll('.ad-link-selector'))।
puppeteer.launch() Puppeteer এর সাথে ব্যবহার করা হলে, এই কমান্ডটি একটি নতুন হেডলেস ব্রাউজার ইনস্ট্যান্স চালু করে। এটি স্বয়ংক্রিয় ব্রাউজার ক্রিয়াগুলিকে সমর্থন করে যেমন পৃষ্ঠা নেভিগেশন এবং ব্যবহারকারীর মিথস্ক্রিয়া অনুকরণ করা (const browser = await puppeteer.launch())।
page.evaluate() In Puppeteer, this method allows you to run JavaScript code in the context of the web page you are controlling. It is used here to extract ad links from the DOM (await page.evaluate(() =>Puppeteer-এ, এই পদ্ধতিটি আপনাকে জাভাস্ক্রিপ্ট কোড চালানোর অনুমতি দেয় আপনি যে ওয়েব পৃষ্ঠাটি নিয়ন্ত্রণ করছেন তার প্রসঙ্গে। এটি এখানে DOM থেকে বিজ্ঞাপনের লিঙ্ক বের করতে ব্যবহার করা হয় (await page.evaluate(() => {...}))।
page.waitForSelector() সমস্ত গতিশীল উপাদান লোড হয়েছে তা নিশ্চিত করে এগিয়ে যাওয়ার আগে পৃষ্ঠায় একটি নির্দিষ্ট নির্বাচক উপস্থিত হওয়ার জন্য অপেক্ষা করে। পেজিনেটেড কন্টেন্টের মাধ্যমে সার্ফিং করার সময় এটি বিশেষভাবে গুরুত্বপূর্ণ, কারণ প্রতিটি পৃষ্ঠা পরিবর্তনের সাথে নতুন বিজ্ঞাপন প্রদর্শিত হয় (অপেক্ষা করুন page.waitForSelector('.ad-link-selector')।
axios.post() সরবরাহ করা URL-এ একটি HTTP POST অনুরোধ পাঠায়। নমুনাটি GET (const response = await axios.post()) এর পরিবর্তে POST এর মাধ্যমে ডেটা পাওয়ার মাধ্যমে 405 সমস্যা এড়াতে চেষ্টা করে।
console.error() কনসোলে ত্রুটি বার্তা লিখতে ব্যবহৃত হয়। এটি কিছু আইটেম বা API অনুরোধ ব্যর্থ হলে ত্রুটির তথ্য প্রদর্শন করে ডিবাগিংয়ে সহায়তা করে (console.error('পৃষ্ঠা বোতাম পাওয়া যায়নি!')।
$() ডকুমেন্ট.querySelector() এর সাথে তুলনীয় Puppeteer-এ উপাদান নির্বাচন করার জন্য একটি সংক্ষিপ্ত বিবরণ। এই স্ক্রিপ্টটি একটি পেজিনেশন ক্লিক ইভেন্ট তৈরি করতে "পরবর্তী পৃষ্ঠা" বোতাম ব্যবহার করে (const nextButton = await page.$('.pagination-next')।
click() এই পদ্ধতিটি একটি HTML উপাদানের উপর একটি ক্লিকের প্রতিলিপি করে। স্ক্রিপ্টগুলিতে, সঠিক পৃষ্ঠা বোতামে ক্লিক করে প্রোগ্রাম্যাটিকভাবে পেজার নেভিগেট করার জন্য এটি ব্যবহার করা হয়।

জাভাস্ক্রিপ্ট-ভিত্তিক পেজিনেশন এবং API নেভিগেশন আয়ত্ত করা

প্রবর্তিত প্রথম স্ক্রিপ্টটি জাভাস্ক্রিপ্ট-ভিত্তিক পেজিনেশন সহ একটি পৃষ্ঠা গতিশীলভাবে অন্বেষণ করতে বিশুদ্ধ জাভাস্ক্রিপ্ট ব্যবহার করে। এই পদ্ধতির পিছনে মূল ধারণাটি হল উপযুক্ত HTML উপাদানগুলিতে ক্লিক ইভেন্টগুলি বেছে নেওয়া এবং সক্রিয় করার মাধ্যমে পেজার বোতামে আঘাতকারী ব্যবহারকারীকে অনুকরণ করা। ব্যবহার করে পৃষ্ঠা সংখ্যা ধারক সনাক্ত করে কমান্ড, আমরা বিভিন্ন পৃষ্ঠা বোতাম অ্যাক্সেস করতে পারি এবং নেভিগেশন স্বয়ংক্রিয় করতে পারি। এই পদ্ধতিটি সেই ক্ষেত্রে আদর্শ যেখানে ম্যানুয়ালি ইউআরএল পরিবর্তন করা কোনো বিকল্প নয় এবং আপনার পেজিনেশন মেকানিজমের সাথে যুক্ত হওয়ার জন্য একটি দ্রুত, ফ্রন্ট-এন্ড ইন্টারফেসের প্রয়োজন।

দ্বিতীয় স্ক্রিপ্টে, আমরা মাথাবিহীন ব্রাউজার নিয়ন্ত্রণ করার জন্য Puppeteer, একটি Node.js প্যাকেজ ব্যবহার করেছি। এই স্ক্রিপ্টটি শুধুমাত্র পেজার বোতাম টিপানোর অনুকরণ করে না, এটি প্রতিটি পুনরাবৃত্তির সাথে সমস্ত বিজ্ঞাপন লিঙ্ক সংগ্রহ করে অসংখ্য পৃষ্ঠায় ভ্রমণের সম্পূর্ণ প্রক্রিয়াটিকে স্বয়ংক্রিয় করে। Puppeteer আপনাকে DOM উপাদানগুলির সাথে সরাসরি ইন্টারঅ্যাক্ট করে গতিশীলভাবে লোড করা সামগ্রীকে স্ক্র্যাপ করার অনুমতি দেয়, অনেকটা একজন প্রকৃত ব্যবহারকারীর মতো। এখানে প্রধান উপাদান এক , যা জাভাস্ক্রিপ্ট কোডকে পৃষ্ঠা প্রসঙ্গের মধ্যে কার্যকর করার অনুমতি দেয়। পেজিনেটেড পৃষ্ঠা জুড়ে বিজ্ঞাপন লিঙ্কের মতো ডেটা সংগ্রহের জন্য এটি উপযুক্ত।

নির্দিষ্ট টুকরা অনুপস্থিত বা API অপ্রত্যাশিতভাবে আচরণ করলেও স্বয়ংক্রিয় প্রক্রিয়াটি ভাল কাজ করে তা নিশ্চিত করতে উভয় স্ক্রিপ্টের ত্রুটি পরিচালনার প্রয়োজন। যেমন, এক্সিকিউশনের সময় যে কোনো ত্রুটির সম্মুখীন হয়, যেমন পৃষ্ঠায় একটি টার্গেটেড বোতাম পাওয়া যায় না। উপরন্তু, Puppeteer এর কমান্ড নিশ্চিত করে যে স্ক্রিপ্ট ইন্টারঅ্যাক্ট করার চেষ্টা করার আগে গতিশীল উপাদান যেমন বিজ্ঞাপন লিঙ্কগুলি সম্পূর্ণরূপে লোড হয়েছে। বিষয়বস্তু রেন্ডার করার জন্য জাভাস্ক্রিপ্টের উপর উল্লেখযোগ্যভাবে নির্ভর করে এমন ওয়েবসাইটগুলির সাথে কাজ করার সময় এটি অত্যন্ত সহজ করে তোলে, কারণ এটি অনুপস্থিত বা অসম্পূর্ণ পৃষ্ঠা লোডের কারণে সৃষ্ট সমস্যাগুলি এড়ায়।

সমাপ্ত স্ক্রিপ্ট ব্যাকএন্ডে প্রতিশ্রুতির উপর ভিত্তি করে Axios, একটি Node.js HTTP ক্লায়েন্ট ব্যবহার করে। এখানে, আমরা সরাসরি API এন্ডপয়েন্ট থেকে ডেটা আনার চেষ্টা করি, যা HTTP 405 এরর অনুসারে, গ্রহণ করে না প্রশ্ন এটি এড়াতে, স্ক্রিপ্ট একটি পাঠায় অনুরোধ, যা সার্ভার দ্বারা অনুমোদিত হতে পারে। এই পদ্ধতিটি ব্যবহারকারীদের জন্য আরও উপযুক্ত যারা সামনের প্রান্তে নেভিগেট না করেই ডেটা বের করতে চান, তবে এটি সার্ভারের API এর গঠন এবং আচরণ বোঝার সাথে জড়িত। ত্রুটি হ্যান্ডলিং গ্যারান্টি দেয় যে কোনো API অনুরোধ ব্যর্থতা রিপোর্ট করা হয়েছে, এটি সার্ভার-সাইড ডেটা পুনরুদ্ধার সমস্যা সমাধান করা সহজ করে তোলে।

সমাধান 1: ভ্যানিলা জাভাস্ক্রিপ্ট ব্যবহার করে জাভাস্ক্রিপ্ট পেজারে ক্লিক অনুকরণ করা

এই পদ্ধতিটি ভ্যানিলা জাভাস্ক্রিপ্ট ব্যবহার করে প্রোগ্রামেটিকভাবে উপযুক্ত DOM উপাদান নির্বাচন করে পেজার বোতামে ক্লিক ইভেন্ট ট্রিগার করে। এটি যেকোনো গতিশীল ফ্রন্ট-এন্ড পরিস্থিতিতে প্রয়োগ করা যেতে পারে যেখানে আইটেমগুলি জাভাস্ক্রিপ্টের সাথে রেন্ডার করা হয়।

// Select the pagination container
const pagerContainer = document.querySelector('.pagination');

// Function to trigger a click event on a pager button
function clickPageButton(pageNumber) {
  const buttons = pagerContainer.querySelectorAll('button');
  const targetButton = [...buttons].find(btn => btn.textContent === String(pageNumber));
  if (targetButton) {
    targetButton.click();
  } else {
    console.error('Page button not found!');
  }
}

// Example usage: clicking the 2nd page button
clickPageButton(2);

সমাধান 2: পেজার নেভিগেশন এবং বিজ্ঞাপন স্ক্র্যাপিং স্বয়ংক্রিয় করতে Puppeteer ব্যবহার করা।

Puppeteer, একটি Node.js টুল যা একটি হেডলেস ব্রাউজার পরিচালনার জন্য একটি উচ্চ-স্তরের API প্রদান করে, এই পদ্ধতিতে জাভাস্ক্রিপ্ট পেজার নেভিগেট করতে এবং সমস্ত বিজ্ঞাপন থেকে লিঙ্ক সংগ্রহ করতে ব্যবহৃত হয়। এটি একটি ব্যাক-এন্ড সমাধান যা প্রায়শই স্বয়ংক্রিয় স্ক্র্যাপিং কাজের জন্য ব্যবহৃত হয়।

const puppeteer = require('puppeteer');

// Function to scrape all ad links from a paginated website
async function scrapeAds() {
  const browser = await puppeteer.launch();
  const page = await browser.newPage();
  await page.goto('https://www.supralift.com/uk/itemsearch/results');

  let ads = [];
  let hasNextPage = true;

  while (hasNextPage) {
    // Scrape the ad links from the current page
    const links = await page.evaluate(() => {
      return Array.from(document.querySelectorAll('.ad-link-selector')).map(a => a.href);
    });
    ads.push(...links);

    // Try to click the next page button
    const nextButton = await page.$('.pagination-next');
    if (nextButton) {
      await nextButton.click();
      await page.waitForSelector('.ad-link-selector');
    } else {
      hasNextPage = false;
    }
  }

  await browser.close();
  return ads;
}

// Call the scraping function and log results
scrapeAds().then(ads => console.log(ads));

সমাধান 3: Node.js এ Axios ব্যবহার করে API থেকে ডেটা আনা

এই পদ্ধতিটি একটি API থেকে সরাসরি ডেটা পুনরুদ্ধার করতে Node.js-এ Axios ব্যবহার করার উপর ফোকাস করে। 405 ত্রুটি নির্দেশ করে যে GET পদ্ধতি অনুমোদিত নয়, তাই এই কৌশলটি POST বা অন্যান্য শিরোনাম ব্যবহার করে বিধিনিষেধ এড়ানোর জন্য। এটি একটি ব্যাক-এন্ড দৃশ্যের জন্য উপযুক্ত যেখানে API মিথস্ক্রিয়া প্রয়োজন।

const axios = require('axios');

// Function to fetch data from the API using POST instead of GET
async function fetchData() {
  try {
    const response = await axios.post('https://www.supralift.com/api/search/item/summary', {
      headers: {
        'Content-Type': 'application/json'
      },
      data: { /* Add necessary POST body if applicable */ }
    });

    console.log(response.data);
  } catch (error) {
    console.error('Error fetching data:', error.response ? error.response.data : error.message);
  }
}

// Invoke the fetchData function
fetchData();

ওয়েব স্ক্র্যাপিং এবং ডেটা সংগ্রহের জন্য জাভাস্ক্রিপ্ট পেজিনেশন অপ্টিমাইজ করা

জাভাস্ক্রিপ্ট-ভিত্তিক পেজিনেশন সিস্টেমের সাথে ওয়েবসাইটগুলি অন্বেষণ করার সময়, দ্রুত ডেটা বের করার জন্য বিভিন্ন পদ্ধতির তদন্ত করা গুরুত্বপূর্ণ। একটি কখনও কখনও উপেক্ষা করা বিকল্প হল পেজিনেশন প্রক্রিয়া দ্বারা জারি করা নেটওয়ার্ক অনুরোধগুলিকে বাধা দেওয়া। ব্রাউজারের ডেভেলপার টুলস, বিশেষ করে "নেটওয়ার্ক" ট্যাবে সম্পাদিত প্রশ্নগুলি সাবধানে পর্যালোচনা করে, আপনি প্রতিটি পৃষ্ঠার জন্য ডেটা আনার জন্য ব্যবহৃত শেষ পয়েন্টগুলি নির্ধারণ করতে পারেন৷ জাভাস্ক্রিপ্ট ভিত্তিক সিস্টেম ব্যবহার করতে পারেন বা ইউআরএল পরিবর্তন না করেই ডাইনামিকভাবে ডাটা লোড করার অনুরোধ, প্রথাগত পেজিনেশনের বিপরীতে যার জন্য URL প্যারামিটার পরিবর্তন করতে হয়।

এই ধরনের ওয়েবসাইটগুলি থেকে লিঙ্ক বা ডেটা বের করতে, অনুরোধগুলিকে বাধা দেয় এবং তারা যে ডেটা ফেরত দেয় তা পুনরুদ্ধার করে। Puppeteer এবং অন্যান্য সরঞ্জাম আপনাকে নেটওয়ার্ক ট্র্যাফিক নিরীক্ষণ করতে এবং দরকারী ডেটা সংগ্রহ করতে সক্ষম করে। সার্ভার-সাইড সীমাবদ্ধতার কারণে যখন এই কৌশলটি বাস্তবসম্মত হয় না, তখন API আচরণ বোঝা গুরুত্বপূর্ণ হয়ে ওঠে। কিছু API, যেমন , যেমন নির্দিষ্ট পদ্ধতি নিষিদ্ধ করতে পারে এবং শুধুমাত্র অনুমতি দেয় প্রশ্ন API এর উদ্দিষ্ট পদ্ধতির সাথে মেলে আপনার প্রশ্নগুলিকে মানিয়ে নেওয়া এই সীমাবদ্ধতার জন্য একটি কার্যকর সমাধান।

অবশেষে, পৃষ্ঠাযুক্ত ডেটা স্ক্র্যাপ করার সময়, অনুরোধগুলির মধ্যে উপযুক্ত বিরতির অনুমতি দেওয়া গুরুত্বপূর্ণ। অনেক ওয়েবসাইট অপব্যবহার রোধ করতে হার-সীমিত অ্যালগরিদম ব্যবহার করে এবং দ্রুত উত্তরাধিকার সূত্রে অনেক বেশি অনুরোধ পাঠানোর ফলে আপনার IP ঠিকানা সাময়িকভাবে কালো তালিকাভুক্ত হতে পারে। সনাক্তকরণ এড়াতে এবং সফল ডেটা নিষ্কাশন নিশ্চিত করতে, প্রশ্নের মধ্যে একটি এলোমেলো বিলম্ব অন্তর্ভুক্ত করুন বা সমকালীন অনুরোধের সংখ্যা সীমিত করুন। এর মতো টুল ব্যবহার করা Node.js-এ এবং সঠিক রেট হ্যান্ডলিং এটি অর্জনের জন্য একটি চমৎকার পদ্ধতি।

  1. জাভাস্ক্রিপ্ট ভিত্তিক পেজিনেশন কি?
  2. জাভাস্ক্রিপ্ট-ভিত্তিক পেজিনেশন হল এমন একটি উপায় যেখানে পৃষ্ঠা সংখ্যা বাটনগুলি ইউআরএল পরিবর্তন না করেই ঘন ঘন তাজা উপাদান লোড করার জন্য জাভাস্ক্রিপ্ট ব্যবহার করে।
  3. আমি কিভাবে একটি জাভাস্ক্রিপ্ট-প্যাজিনেটেড ওয়েবসাইট থেকে ডেটা স্ক্র্যাপ করতে পারি?
  4. আপনি যেমন সরঞ্জাম ব্যবহার করতে পারেন বা পেজিনেশন বাটন ক্লিক স্বয়ংক্রিয় করতে বা পৃষ্ঠাকরণের সময় নেটওয়ার্ক অনুরোধগুলি ক্যাপচার করতে।
  5. কেন এপিআই একটি 405 পদ্ধতি ফেরত দিচ্ছে যে ত্রুটি অনুমোদিত নয়?
  6. এটি ঘটে কারণ API শুধুমাত্র কিছু HTTP পদ্ধতি সমর্থন করে। উদাহরণস্বরূপ, এটি ব্লক হতে পারে অনুমতি দেওয়ার সময় অনুরোধ অনুরোধ
  7. আমি কি পৃষ্ঠাগুলি নেভিগেট করতে URL পরিবর্তন করতে পারি?
  8. জাভাস্ক্রিপ্ট-ভিত্তিক পেজিনেশনে, আপনি প্রায়শই সরাসরি URL পরিবর্তন করতে পারবেন না। নেভিগেট করার জন্য, আপনাকে জাভাস্ক্রিপ্ট ইভেন্ট ট্রিগার করতে হবে বা API এন্ডপয়েন্ট ব্যবহার করতে হবে।
  9. পেজিনেটেড ডেটা স্ক্র্যাপ করার জন্য আমি কোন সরঞ্জামগুলি ব্যবহার করতে পারি?
  10. জনপ্রিয় স্ক্র্যাপিং প্রোগ্রাম অন্তর্ভুক্ত ব্রাউজার অটোমেশনের জন্য এবং HTTP অনুরোধের জন্য। উভয়ই পৃষ্ঠাযুক্ত বিষয়বস্তু দক্ষতার সাথে পরিচালনা করে।

জাভাস্ক্রিপ্ট-ভিত্তিক পেজিনেশনের সাথে কাজ করার জন্য ফ্রন্ট-এন্ড এবং ব্যাক-এন্ড সমাধানগুলির সমন্বয় প্রয়োজন। আপনি ব্রাউজার ক্রিয়াকলাপগুলিকে স্বয়ংক্রিয় করতে Puppeteer ব্যবহার করুন বা API এন্ডপয়েন্টগুলির সাথে সরাসরি ইন্টারফেস করতে Axios ব্যবহার করুন, দক্ষ স্ক্র্যাপিংয়ের জন্য যত্নশীল নকশা এবং সম্পাদনের প্রয়োজন।

একটি ওয়েবসাইট কীভাবে ডেটা লোড করে এবং প্রক্রিয়া করে তা বোঝা আপনাকে প্রয়োজনীয় তথ্য বের করার জন্য দক্ষ স্ক্রিপ্ট লিখতে দেয়। 405 ত্রুটির মতো ঘন ঘন বিপদ এড়াতে, নেটওয়ার্ক ট্র্যাফিক নিরীক্ষণ, হারের সীমা পরিচালনা এবং যথাযথ HTTP পদ্ধতিগুলি ব্যবহার করতে সতর্ক থাকুন।

  1. ওয়েব স্ক্র্যাপিংয়ের জন্য পাপেটিয়ার ব্যবহার সম্পর্কে বিস্তারিত তথ্য অফিসিয়াল পাপেটিয়ার ডকুমেন্টেশন থেকে উল্লেখ করা হয়েছিল। পুতুল ডকুমেন্টেশন
  2. HTTP পদ্ধতি এবং API অনুরোধ পরিচালনার ব্যাখ্যা, বিশেষত 405 "পদ্ধতি অনুমোদিত নয়" ত্রুটির আশেপাশে, থেকে নেওয়া হয়েছিল MDN ওয়েব ডক্স .
  3. Node.js-এ HTTP অনুরোধ করার জন্য Axios-এর অন্তর্দৃষ্টি অফিসিয়ালের কাছ থেকে নেওয়া হয়েছে Axios ডকুমেন্টেশন .
  4. JavaScript DOM ম্যানিপুলেশন এবং ক্লিকের মতো ইভেন্টের জন্য, বিষয়বস্তু থেকে উল্লেখ করা হয়েছিল MDN ওয়েব ডক্স .