🎯 कस्टमाइज़ करने योग्य, डिटेक्शन-प्रतिरोधी क्लाउड ब्राउज़र जो स्व-विकसित Chromium द्वारा संचालित है, वेब क्रॉलर और एआई एजेंट्स के लिए डिज़ाइन किया गया। 👉अभी आज़माएं
वापस ब्लॉग पर

कैसे GEO के लिए ChatGPT पर बैच क्वेरी करें: Scrapeless Cloud Browser का उपयोग करके एक स्वचालित समाधान

Sophia Martinez
Sophia Martinez

Specialist in Anti-Bot Strategies

14-Nov-2025
html Copy
<div style="background-color: #f3f4f6; padding: 24px 40px; border-radius: 10px;">
  <strong style="font-size: 18px;">
    हर क्षेत्र में बढ़त प्राप्त करें!
  </strong>
  <p style="margin-bottom: 24px;">
    Scrapeless के साथ ChatGPT प्रश्नों को स्वचालित करें और सटीक GEO अंतर्दृष्टियाँ अनलॉक करें। अनुमान न लगाएँ—जानें। 
  </p>
  <div style="text-align: center; margin-top: 10px;">
    <a href="https://t.me/liam_scrapeless
" style="background: #12A594; color: #fff; padding: 10px 28px; border-radius: 38px; text-decoration: none; display: inline-block;">
      पूर्ण GEO डेटा समाधान तक पहुँचें
    </a>
  </div>
</div>

## परिचय

इस वर्ष की शुरुआत से, कई कंपनियों की SEO रणनीतियों में मौलिक परिवर्तन हुए हैं। 
दिन-प्रतिदिन अधिक से अधिक उपयोगकर्ता जब उन्हें जानकारी की आवश्यकता होती है, तो वे Google खोज नहीं करते। इसके बजाय, वे सीधे ChatGPT, Claude या Gemini में उत्पादों, सेवाओं और ब्रांडों के बारे में पूछते हैं।

इसका मतलब है: आपके **ChatGPT में दृश्यता** ब्रांड की प्रतिस्पर्धात्मकता का नया मानदंड बनती जा रही है।

समस्या यह है — ChatGPT में कोई "रैंकिंग" विशेषता और कोई "कीवर्ड विश्लेषण उपकरण" नहीं है।

**आप बस नहीं जान सकते:**

* क्या मेरा ब्रांड ChatGPT के उत्तरों में दिखाई दे रहा है?
* क्या ChatGPT मेरे प्रतिस्पर्धियों की सिफारिश कर रहा है?
* क्या उत्तर देशों या भाषाओं के बीच भिन्न हैं?

इन प्रश्नों का समाधान करने के लिए, पहला कदम है:

👉 **डेटा एकत्र करने और कार्यान्वयन योग्य अंतर्दृष्टियाँ निकालने के लिए ChatGPT उत्तरों के थोक प्रश्न करें**

---

## GEO क्या है?

**जनरेटिव इंजन ऑप्टिमाइजेशन (GEO)** उस प्रथा को कहते हैं जिसमें सामग्री को इस तरह से बनाया और अनुकूलित किया जाता है कि यह Google AI ओवरव्यू, AI मोड, ChatGPT, और Perplexity जैसे प्लेटफ़ॉर्म पर AI द्वारा उत्पन्न उत्तरों में दिखाई दे।

अतीत में, सफलता का मतलब था खोज इंजन परिणाम पृष्ठों (SERPs) पर उच्च रैंकिंग प्राप्त करना। भविष्य में, "शीर्ष रैंकिंग" का कोई भी विचार समाप्त हो सकता है। इसके बजाय, आपको **पसंदीदा सिफारिश बनना** चाहिए—वह समाधान जो AI उपकरण सक्रिय रूप से अपने उत्तरों में प्रस्तुत करते हैं।

GEO ऑप्टिमाइजेशन के मुख्य उद्देश्य अब क्लिक तक सीमित नहीं हैं, बल्कि तीन प्रमुख मैट्रिक्स पर ध्यान केंद्रित करते हैं:

* **ब्रांड दृश्यता**: AI द्वारा उत्पन्न उत्तरों में आपके ब्रांड के दिखाई देने की संभावना बढ़ाएँ।
* **स्रोत प्राधिकरण**: सुनिश्चित करें कि आपका डोमेन, सामग्री, या डेटा AI द्वारा एक विश्वसनीय संदर्भ के रूप में चयनित हो।
* **कथात्मक संगति और सकारात्मक स्थिति**: सुनिश्चित करें कि AI आपके ब्रांड को पेशेवर, सटीक और सकारात्मक रूप से वर्णित करता है।

इसका मतलब है कि "कीवर्ड रैंकिंग" पर आधारित पारंपरिक SEO लॉजिक धीरे-धीरे **AI स्रोत उद्धरण तंत्रों** के लिए रास्ता दे रहा है।

ब्रांडों को "खोज योग्य" होने से **विश्वसनीय, उद्धृत, और सक्रिय रूप से सिफारिश किए जाने** की ओर विकसित होना चाहिए।

---

## थोक ChatGPT प्रश्नों को स्वचालित करना क्यों?

मार्केटिंग और SEO के दृष्टिकोण से, ChatGPT सामग्री खोज और प्रदर्शन का एक नया चैनल बन गया है।

हालांकि, तीन मुख्य दर्द बिंदु हैं:

1. **ब्रांड कवरेज में कोई दृश्यता नहीं**
   कंपनियों को यह नहीं पता होता कि उनके उत्पादों का ChatGPT द्वारा अनुक्रमण, उल्लेख, या सिफारिश की जा रही है या नहीं। बिना डेटा, लक्षित सामग्री अनुकूलन या वितरण रणनीतियों का निर्माण करना असंभव है।

2. **GEO स्तर की अंतर्दृष्टियों की कमी**
   ChatGPT के उत्तर क्षेत्र, भाषा, और यहां तक कि समय क्षेत्र के अनुसार भिन्न होते हैं। एक अमेरिकी उपयोगकर्ता के लिए सिफारिश किया गया उत्पाद जापानी उपयोगकर्ता के लिए दिखाई नहीं दे सकता। अंतरराष्ट्रीय रणनीतियों के लिए, कंपनियों को इन अंतर को समझना होगा।

3. **पारंपरिक SEO उपकरण यह डेटा प्रदान नहीं कर सकते**
   मौजूदा SEO उपकरण (जैसे, Ahrefs, Semrush) सीमित क्षमताओं के साथ होते हैं और ChatGPT प्रतिक्रियाओं को पूरी तरह से ट्रैक नहीं कर सकते। इसका अर्थ है कि **AI खोज चैनलों के भीतर ब्रांड प्रदर्शन की निगरानी के लिए एक नए दृष्टिकोण की आवश्यकता है**।

इसलिए, **ChatGPT के थोक प्रश्नों** का मुख्य लक्ष्य प्रणालीबद्ध रूप से आपके ब्रांड की उपस्थिति को ChatGPT उत्तरों में एकत्रित करना, विश्लेषण करना और अनुकूलित करना है। यह कंपनियों की मदद करता है:

* उच्च-पotenटियल प्रश्नों को पहचानना जो पहले से ही ChatGPT द्वारा उल्लेखित हैं;
* उन सामग्रियों के गैप को खोजें जो अभी तक कवर नहीं किए गए हैं;
* लक्षित GEO ऑप्टिमाइजेशन रणनीतियाँ विकसित करें।

---

## Scrapeless Cloud Browser क्यों चुनें?

कई लोग सीधे OpenAI API को थोक प्रश्न करने के लिए कॉल करने पर विचार कर सकते हैं।

हालांकि, व्यावहारिकता में, API दृष्टिकोण में स्पष्ट सीमाएँ हैं:

* परिणाम ऐतिहासिक प्राथमिकताओं और संदर्भ द्वारा आसानी से प्रभावित होते हैं, जिससे वे कम उद्देश्यपूर्ण हो जाते हैं।
* विभिन्न भौगोलिक स्थानों से पहुँच का अनुकरण करने के लिए IP को जल्दी से स्विच करना कठिन है।
* थोक प्रश्न करने की लागत बहुत अधिक होती है (टोकन द्वारा चार्ज किया जाता है, बड़े पैमाने पर महंगा हो जाता है)।

यही वह जगह है जहाँ [**Scrapeless Cloud Browser**](https://www.scrapeless.com/hi/product/scraping-browser) काम आता है।

---

### Scrapeless Browser क्या है?

**Scrapeless Browser** एक क्लाउड ब्राउज़र है जो डेटा निष्कर्षण और स्वचालन कार्यों के लिए डिज़ाइन किया गया है। यह आपको क्लाउड से ChatGPT तक पहुँचने की अनुमति देता है, जो वास्तविक उपयोगकर्ता व्यवहार की नकल करता है, अधिक सटीक और व्यापक परिणाम प्रदान करता है।

पारंपरिक API कॉल की तुलना में, Scrapeless Cloud Browser कई तरीकों से अलग है:

* **कोई खाता प्राथमिकता हस्तक्षेप नहीं**
  सभी प्रश्न अलग-थलग, लॉगिन-मुक्त ब्राउज़र वातावरण में किए जाते हैं, ताकि परिणाम उद्देश्यपूर्ण और विश्वसनीय सुनिश्चित हो सकें।
  • मल्टी-क्षेत्र GEO सिमुलेशन
    195+ देशों से बने आवासीय प्रॉक्सीस, स्थिर ISP, और अनलिमिटेड IPs विभिन्न स्थानों से उपयोगकर्ताओं का आसान सिमुलेशन करते हैं।

  • उच्च समवर्तीता और कम लागत
    प्रति कार्य 1,000+ समवर्ती उदाहरणों का समर्थन करता है, समय के अनुसार बिलिंग, पारंपरिक APIs की तुलना में बहुत कम लागत के साथ।

  • मुख्यधारा के ढांचों के साथ प्राकृतिक संगति
    मौजूदा Puppeteer या Playwright परियोजनाओं को एक ही लाइन कोड के साथ माइग्रेट करें—कोई अतिरिक्त अनुकूलन की आवश्यकता नहीं है।

  • स्मार्ट एंटी-डिटेक्शन और दृश्य डिबगिंग
    क्लाउडफ्लेयर, reCAPTCHA, और अन्य सुरक्षा उपायों के लिए अंतर्निहित हैंडलिंग, लाइव व्यू डिबगिंग और सत्र रिकॉर्डिंग के समर्थन के साथ।

अनुशंसित पढ़ाई: क्लाउडफ्लेयर सुरक्षा और टर्नस्टाइल को स्क्रेपलेस का उपयोग करके बायपास करने का तरीका | संपूर्ण गाइड

संक्षेप में, Scrapeless क्लाउड ब्राउज़र आपको थोक “उपयोगकर्ता-परिप्रेक्ष्य ChatGPT प्रश्न” को प्रभावी ढंग से, लागत-कुशलता से, और सटीक रूप से करने में सक्षम बनाता है—सैकड़ों ChatGPT खातों को पंजीकृत किए बिना—और स्वचालित रूप से संरचित परिणाम निकालता है।


उदाहरण: Scrapeless ब्राउज़र का उपयोग करके ChatGPT का समूह प्रश्न पूछना

Scrapeless ब्राउज़र एक क्लाउड-आधारित हेडलेस ब्राउज़र सेवा है जो Puppeteer और Playwright जैसे प्रमुख स्वचालन ढांचों के साथ संगत है। इसे उपयोग करने पर, आपको स्थानीय ब्राउज़र, प्रॉक्सी, या नोड बनाए रखने की आवश्यकता नहीं है; आप इसे सिर्फ एक कनेक्शन कोड की एक लाइन के साथ शुरू कर सकते हैं।


1. निर्भरताएँ स्थापित करें

bash Copy
npm install puppeteer-core @scrapeless-ai/sdk node-fetch

2. Scrapeless ब्राउज़र को कॉन्फ़िगर और कनेक्ट करें

ts Copy
import puppeteer, { Browser, Page } from 'puppeteer-core';
import { Scrapeless, PuppeteerLaunchOptions } from '@scrapeless-ai/sdk';

const scrapeless = new Scrapeless();

async function connectBrowser(): Promise<Browser> {
  const options: PuppeteerLaunchOptions = {
    session_name: 'Batch ChatGPT',
    session_ttl: 600,
    fingerprint: {
      platform: 'macOS',
      localization: { timezone: 'America/New_York' },
      args: { '--window-size': '1920,1080' },
    },
  };

  const { browserWSEndpoint } = await scrapeless.browser.createSession(options);
  const browser = await puppeteer.connect({ browserWSEndpoint, defaultViewport: null });
  return browser;
}

Scrapeless ब्राउज़र API कुंजी प्राप्त करने के लिए Scrapeless डैशबोर्ड में लॉगिन करें।

आपकी Scrapeless ब्राउज़र API कुंजी प्राप्त करें

💡 Scrapeless लाभ #1: शून्य कॉन्फ़िगरेशन वातावरण

  • स्थानीय रूप से ब्राउज़र उदाहरण बनाए रखने की आवश्यकता नहीं है, न्यूनतम संसाधन खपत, और आसान स्केलिंग।
  • मौजूदा Puppeteer परियोजनाएँ Scrapeless में न्यूनतम परिवर्तनों के साथ माइग्रेट कर सकती हैं।
  • वास्तविक उपयोगकर्ता वातावरण का आसानी से अनुकरण करें, जिससे छिपने और सफलता की दर बढ़ती है।
  • थोक ChatGPT प्रश्नों जैसे बड़े पैमाने पर स्वचालन कार्यों के लिए आदर्श।

3. ChatGPT तक पहुँच को स्वचालित करें और संकेत दर्ज करें

ts Copy
async function queryChatGPT(browser: Browser, prompt: string): Promise<string> {
  const page = await browser.newPage();
  await page.goto('https://chatgpt.com/');

  const inputSelector = '[placeholder="Ask anything"]';
  await page.waitForSelector(inputSelector, { visible: true });
  await page.type(inputSelector, prompt);
  await page.keyboard.press('Enter');

  await page.waitForSelector('[data-message-author-role="assistant"]');
  const result = await page.evaluate(() => {
    const messages = document.querySelectorAll('[data-message-author-role="assistant"]');
    return messages[messages.length - 1]?.textContent || '';
  });

  await page.close();
  return result;
}

💡 Scrapeless लाभ #2: असली वेब वातावरण

  • वास्तविक वेब पृष्ठों पर इंटरैक्शन को स्वचालित करता है (टाइपिंग, क्लिक करना, सबमिट करना)।
  • गतिशील रूप से प्रस्तुत की गई सामग्री को कैप्चर करता है।
  • परिणाम वही होते हैं जो एक वास्तविक उपयोगकर्ता ChatGPT पर जाने पर देखेगा।

4. खोज परिणाम निष्कर्षण के लिए विभिन्न प्रकारों का समर्थन

4.1 ChatGPT पाठ प्रतिक्रियाएँ निकालना

ts Copy
let gptAnswer: string;
gptAnswer = await waitForChatGPTResponse(page);

4.2 छवि कार्ड निकालना

ts Copy
let gptImageCards: ChatgptResponse['image_cards'] = [];
// छवियों को निकालने और { url, position } बनाने के लिए चयनकर्ताओं का उपयोग करें

4.3 अनुशंसित उत्पाद निकालना

ts Copy
const gptRecommendProducts: ChatgptResponse['products'] = [];
// उत्पाद लिंक, शीर्षक, और छवियों को निकालने के लिए चयनकर्ताओं का उपयोग करें

4.4 उद्धरण/संदर्भ निकालना

ts Copy
let gptCitations: ChatgptResponse['citations'] = [];
// उद्धरण लिंक, आइकन, शीर्षकों, और विवरणों को निकालने के लिए फुटनोट बटन का उपयोग करें

4.5 संलग्न लिंक निकालना

ts Copy
let gptLinksAttached: ChatgptResponse['links_attached'] = [];
// लिंक और उनके पाठ को निकालने के लिए मार्कडाउन लिंक चयनकर्ताओं का उपयोग करें

4.6 पृष्ठ शरीर HTML निकालना

ts Copy
const body = await page.evaluate(() => document.body.innerHTML);
hi Copy
const cleanBody = body
  .replace(/<script[^>]*>[\s\S]*?<\/script>/gi, '')
  .replace(/<style[^>]*>[\s\S]*?<\/style>/gi, '')
  .replace(/\s+/g, ' ')
  .trim();

यहाँ, HTML की सफाई की जाती है: <script>, <style>, <svg>, <img> टैग हटा दिए जाते हैं ताकि एक साफ शरीर की सामग्री प्राप्त की जा सके।

💡 स्क्रेपलेस फायदे #3: बहु-प्रकार परिणाम निष्कर्षण

  • एकल अनुरोध कई प्रकार की संरचित जानकारी प्राप्त कर सकता है, बिना कई कॉल या विभिन्न उपकरणों को संयोजित किए।
  • न केवल टेक्स्ट, बल्कि चित्र, उत्पाद, संदर्भ, संलग्न लिंक, और साफ HTML भी निकाला जा सकता है।
  • प्रत्येक प्रकार का डेटा वस्तुओं के एक एरे के रूप में पैकेज किया जाता है (जैसे, ChatgptResponse['products']), इसे सीधे JSON, CSV, या वेबहुक्स में आउटपुट करना आसान बनाता है, और डाउनस्ट्रीम ऑटोमेशन वर्कफ़्लोज़ का समर्थन करता है।

5. स्वतंत्र ब्राउज़र संदर्भ और सत्र

5.1 सत्र-स्तरीय पृथक्करण

ts Copy
const { session_name, task_id, ... } = input;

browser = await this.connectToBrowser({
  session_name,              // प्रत्येक कार्य अलग सत्र नाम निर्दिष्ट कर सकता है
  session_ttl: 600,          // सत्र की जीवन अवधि
  session_recording,
  proxy_url,
  // ...
});

session_name पैरामीटर का उपयोग करते हुए, अलग क्वेरी अलग ब्राउज़र सत्र का उपयोग कर सकती हैं, सत्र-स्तरीय पृथक्करण प्राप्त कर सकती हैं।

5.2 ब्राउज़र उदाहरण पृथक्कরণ

ts Copy
async solver(input: QueryChatgptRequest, ...): Promise<BaseOutput> {
  let browser: Browser;
  
  try {
    // प्रत्येक कॉल के लिए एक नया ब्राउज़र कनेक्शन बनाएँ
    browser = await this.connectToBrowser(...);
    const page = await browser.newPage();
    // कार्य निष्पादित करें
  } finally {
    // कार्य समाप्त होने के बाद ब्राउज़र बंद करें
    await page.close();
    await browser.close();
  }
}

प्रत्येक solver() कॉल:

  • एक स्वतंत्र ब्राउज़र उदाहरण बनाएगा
  • उपयोग के बाद अपने आप साफ हो जाएगा finally ब्लॉक में

5.3 प्रॉक्सी पृथक्करण

ts Copy
const { proxy_url } = input;

browser = await this.connectToBrowser({
  proxy_url,  // प्रत्येक कार्य एक अलग प्रॉक्सी का उपयोग कर सकता है
  // ...
});

const proxy_country = /-country_([A-Z]{2,3})/.exec(proxy_url)?.[1] || 'ANY';

अलग कार्य अलग proxy_url मानों का उपयोग करके नेटवर्क-स्तरीय पृथक्करण प्राप्त कर सकते हैं।

5.4 फिंगरप्रिंट पृथक्करण

ts Copy
fingerprint: {
  platform: 'macOS',
  localization: {
    timezone: 'America/New_York',
  },
  args: {
    '--window-size': '1920,1080',
  },
}

💡 स्क्रेपलेस फायदा #4: पृथक्करण के माध्यम से स्थिरता

  • प्रत्येक ChatGPT क्वेरी स्वतंत्र ब्राउज़र सत्र में चलती है, हस्तक्षेप को रोकती है
  • कुकीज़, लोकलस्टोरेज, या फिंगरप्रिंट के प्रदूषण से बचती है, अनुरोध की सफलता दर को बढ़ाती है
  • एक ही मशीन पर एक बड़ी संख्या में क्वेरियों को बिना Puppeteer उदाहरणीय संघर्षों के समानांतर चलाने में सक्षम बनाती है
  • उच्च-समवर्ती परिदृश्यों में स्थिरता और विश्वसनीयता को बढ़ाता है

6. वैश्विक GEO स्विचिंग: विभिन्न क्षेत्रों से प्रतिक्रियाएँ प्राप्त करें

6.1 वैश्वीकरण भू-स्थान

ts Copy
const proxy_country = /-country_([A-Z]{2,3})/.exec(proxy_url)?.[1] || 'ANY';

6.2 फिंगरप्रिंट स्थानीयकरण

ts Copy
fingerprint: {
  platform: 'macOS',
  localization: {
    timezone: 'America/New_York',
  },
  args: {
    '--window-size': '1920,1080',
  },
}

💡 स्क्रेपलेस फायदा #5: 195+ देश नोड, स्वचालित प्रॉक्सी और स्थानीयकृत अनुकरण

  • स्वचालित देश आईपी चयन
    देश कोड proxy_url से निकाला जाता है (जैसे, -country_US, -country_JP), और स्क्रेपलेस स्वचालित रूप से अनुरोधों को संबंधित क्षेत्र में आवासीय आईपी पर रूट करता है।

  • प्रॉक्सी पूल रखरखाव की आवश्यकता नहीं
    बैकएंड वैश्विक नोड को स्वचालित रूप से प्रबंधित करता है, इसलिए उपयोगकर्ताओं को प्रॉक्सी सूचियाँ स्वयं सेटअप या अपडेट नहीं करनी पड़ती।

  • स्थानीयकृत ब्राउज़र वातावरण
    fingerprint.localization.timezone टाइमज़ोन सेट कर सकता है। स्वतंत्र सत्रों के साथ मिलकर, यह लक्ष्य क्षेत्र का वातावरण अनुकरण करता है, जो सामग्री प्रदर्शनी और क्षेत्र-विशिष्ट खोज परिणामों को प्रभावित करता है।

  • वास्तविक स्थानीयकृत परिणाम प्राप्त करें
    लौटाया गया ChatgptResponse.country_code अनुरोध का भौगोलिक स्थान दर्शाता है, जिससे अंतरराष्ट्रीय एसईओ, ब्रांड निगरानी, या क्षेत्र-संवेदनशील सामग्री विश्लेषण अधिक सटीक बनता है।

7. परिणाम निकालें और कई आउटपुट प्रारूपों का समर्थन करें

7.1 संरचित आउटपुट

startChat विधि में, कैप्चर किया गया डेटा एकीकृत ChatgptResponse वस्तु में संकुचित किया जाता है:

ts Copy
resolve({
  prompt,
  success: true,
  answer: answerResponse,           // टेक्स्ट / HTML / कच्चा
  country_code: proxy_country,      // भू-जानकारी
  citations: gptCitations,
  links_attached: gptLinksAttached,
  image_cards: gptImageCards,
  products: gptRecommendProducts,
  url: _url,
});

💡 स्क्रेपलेस फायदा #6: संरचित आउटपुट

  • प्रत्येक क्वेरी कार्य एक संरचित वस्तु उत्पन्न करता है।
  • इसमें टेक्स्ट उत्तर, संलग्न लिंक, चित्र, अनुशंसित उत्पाद, संदर्भ, देश कोड, और URL जैसे फ़ील्ड शामिल हैं।
  • संरचित वस्तुओं का स्वचालितता के लिए सीधे उपयोग किया जा सकता है, बिना अतिरिक्त पार्सिंग के।

7.2 कई आउटपुट विधियाँ

solver विधि में, परिणाम धकेले या लौटाए जा सकते हैं:

  1. वेबहुक आउटपुट
ts Copy

यह.pushToMessage(payload, webhook);

Copy
2. **फंक्शन लौटें**

```ts
return createResponse(JSON.stringify(payload), payload.url);

💡 Scrapeless Advantage #7: डेटा पाइपलाइन इंटीग्रेशन के लिए मूल समर्थन

  • संरचित डेटा को सीधे बाहरी सिस्टम या ऑटोमेशन टूल (जैसे, n8n, Zapier, Airtable) में डाला जा सकता है।
  • अतिरिक्त इंटरफेस विकसित करने या डेटा को मैन्युअल रूप से प्रोसेस करने की आवश्यकता नहीं है, जिससे वास्तविक समय में ऑटोमेशन इंटीग्रेशन संभव होता है।
  • जब इन-हाउस सिस्टम या डेटाबेस से कनेक्ट करते हैं, तो कोई अतिरिक्त पार्सिंग या रूपांतरण की आवश्यकता नहीं होती है, जो कई डेटा पाइपलाइन आउटपुट को सपोर्ट करता है।
  • प्रत्येक क्वेरी कार्य परिणाम एक संरचित वस्तु है, जो आगे की विश्लेषण, सांख्यिकी, या CSV/JSON में निर्यात करने की सुविधा देती है।

पूर्ण कोड

Copy
import puppeteer, { Browser, Page, Target } from 'puppeteer-core';
import fetch from 'node-fetch';
import { PuppeteerLaunchOptions, Scrapeless } from '@scrapeless-ai/sdk';
import { Logger } from '@nestjs/common';

export interface BaseInput {
  task_id: string;
  proxy_url: string;
  timeout: number;
}

export interface BaseOutput {
  url: string;
  data: number[];
  collection?: string;
  dataType?: string;
}

export interface QueryChatgptRequest extends BaseInput {
  prompt: string;
  webhook?: string;
  session_name?: string;
  web_search?: boolean;
  session_recording?: boolean;
  answer_type?: 'text' | 'html' | 'raw';
}

export interface ChatgptResponse {
  prompt: string;
  task_id?: string;
  duration?: number;
  answer?: string;
  url: string;
  success: boolean;
  country_code: string;
  error_reason?: string;
  links_attached?: Partial<{ position: number; text: string; url: string }>[];
  citations?: Partial<{ url: string; icon: string; title: string; description: string }>[];
  products?: Partial<{ url: string; title: string; image_urls: (string | null)[] }>[];
  image_cards?: Partial<{ position: number; url: string }>[];
}

interface StartChatParams extends QueryChatgptRequest {
  page: Page;
  browser: Browser;
}

export class ChatgptService {
  logger = new Logger(this.constructor.name);
  scrapeless = new Scrapeless();

  private timeoutMultiplier = 2;
  private defaultTimeout = 3 * 60 * 1000;
  private internalErrorSymbol = '[InternalError]:';

  async solver(input: QueryChatgptRequest, checkTimeout: () => boolean): Promise<BaseOutput> {
    const { session_name, task_id, webhook, session_recording, proxy_url } = input;

    let browser: Browser;

    const startTime = performance.now();
    const successful = false;

    const getTotalDuration = () => {
      const endTime = performance.now();
      const totalDuration = ((endTime - startTime) / 1000).toFixed(2);
      return totalDuration;
    };

    const handleChatResponse = (data: Partial<ChatgptResponse>) => {
      const payload = { ...data, task_id, duration: getTotalDuration() };
      return payload;
    };

    const createResponse = (data: string, url = 'https://chatgpt.com'): BaseOutput => {
      return {
        url: url,
        data: Array.from(Buffer.from(data)),
        dataType: 'json',
      };
    };

    try {
      browser = await this.connectToBrowser(
        {
          session_name,
          session_ttl: 600,
          session_recording,
          proxy_url,
          fingerprint: {
            platform: 'macOS',
            localization: {
              timezone: 'America/New_York',
            },
            args: {
              '--window-size': '1920,1080',
            },
          },
        },
        checkTimeout,
      );

      const page = await browser.newPage();

      await this.fakePageDate(page);

      const chatParams: StartChatParams = { ...input, page, browser };
      const results = await this.startChat(chatParams);
      const payload = handleChatResponse(results);
      this.pushToMessage(payload, webhook);
      return createResponse(JSON.stringify(payload), payload.url);
    } catch (error) {
      if (error.success) {
        const payload = handleChatResponse(error);
        this.pushToMessage(payload, webhook);
        return createResponse(JSON.stringify(payload), error.url);
      }
      if (error.error_reason) {
        const errorMessage = error.error_reason;
        const payload = handleChatResponse(error);
        this.pushToMessage(payload, webhook);
        this.logger.warn(`प्रोसेसिंग विफल: ${errorMessage}`);
        throw { message: !errorMessage.includes(this.internalErrorSymbol) ? errorMessage : '' };
      }
      const errorMessage = error.message || 'अज्ञात त्रुटि';
      const payload = handleChatResponse({
        success: false,
        error_reason: errorMessage,
      });
      this.pushToMessage(payload, webhook);
      this.logger.warn(`प्रोसेसिंग विफल: ${errorMessage}`);
      throw error;
    } finally {
      const totalDuration = getTotalDuration();
      this.logger.log(
        `प्रोसेसिंग ${successful ? 'सफल' : 'पूरा'} | कुल अवधि: ${totalDuration} सेकंड`,
      );
    }
  }

Here is the translated text in Hindi:

typescript Copy
async format(data: Uint8Array): Promise<QueryChatgptRequest> {
    if (!data) {
      throw new Error('कोई मान्य इनपुट डेटा नहीं');
    }
    const input = JSON.parse(data.toString()) as QueryChatgptRequest;

    if (!input.prompt) {
      this.logger.error(`प्रांप्ट आवश्यक है`);
      throw new Error('प्रांप्ट आवश्यक है');
    }

    return {
      ...input,
      timeout: input.timeout || this.defaultTimeout,
      web_search: input.web_search ?? true,
      session_name: input.session_name || 'चैटजीपीटी उत्तर',
      session_recording: input.session_recording || false,
      answer_type: input.answer_type || 'पाठ',
    };
  }

  private startChat(params: StartChatParams): Promise<ChatgptResponse> {
    return new Promise(async (resolve, reject: (reason: ChatgptResponse) => void) => {
      const { prompt, answer_type, web_search, timeout, page, browser, proxy_url } = params;
      let action: string;
      let isAborted = false;
      let rawResponse: string;

      this.logger.debug((action = 'ब्राउज़र से कनेक्ट कर रहा है'));

      const proxy_country = /-country_([A-Z]{2,3})/.exec(proxy_url)?.[1] || 'ANY';
      const query = new URLSearchParams({ q: prompt });
      if (web_search) {
        query.set('hints', 'search');
      }
      const baseUrl = 'https://chatgpt.com';
      const _url = `${baseUrl}/?${query.toString()}`;

      function waitForChatGPTResponse(page: Page): Promise<string> {
        return new Promise((resolve, reject) => {
          let retryCount = 0;
          const CHECK_INTERVAL = 500; // हर 500ms में एक बार जांचें

          const checkResponse = async () => {
            try {
              if (isAborted) {
                resolve('समय समाप्त');
                return;
              }
              const currentContent = await page.evaluate(() => {
                const assistantMessage = '[data-message-author-role="assistant"]';
                const $assistantMessages = document.querySelectorAll(assistantMessage);
                const lastMessage = $assistantMessages[$assistantMessages.length - 1];
                if (!lastMessage) return null;

                // जब एक कॉपी बटन एक से अधिक दिखाई देता है, तो इसका मतलब है कि GPT का उत्तर पूरा हो गया है
                const $answerCopyButtons = document.querySelectorAll('button[data-testid="copy-turn-action-button"]');
                if ($answerCopyButtons.length > 1) {
                  return lastMessage.textContent || 'कोई सामग्री नहीं';
                } else {
                  return null;
                }
              });

              // यदि सामग्री नहीं बदली गई है और खाली नहीं है
              if (currentContent) {
                retryCount++;
                // यदि सामग्री स्थिर है और खाली नहीं है, तो उत्तर पूर्ण माना जाता है
                if (retryCount >= 3) {
                  // सामग्री 1.5 सेकंड के लिए स्थिर
                  resolve(currentContent);
                  return;
                }
              }

              // जांच जारी रखें
              setTimeout(checkResponse, CHECK_INTERVAL);
            } catch (error) {
              reject(error);
            }
          };

          // जांच शुरू करें
          checkResponse();
        });
      }

      async function receiveChatGPTStream() {
        const client = await page.createCDPSession();
        await client.send('Fetch.enable', {
          patterns: [
            {
              urlPattern: '*conversation',
              requestStage: 'Response',
            },
          ],
        });

        client.on('Fetch.requestPaused', async (event) => {
          const { requestId, request, responseHeaders } = event;
          const isSSE = responseHeaders?.some(
            (h) => h.name?.toLowerCase() === 'content-type' && h.value?.includes('text/event-stream'),
          );
          if (request.url.includes('/conversation') && isSSE) {
            try {
              const { body, base64Encoded } = await client.send('Fetch.getResponseBody', { requestId });
              rawResponse = base64Encoded ? Buffer.from(body, 'base64').toString('utf-8') : body;
            } catch (err) {
              console.warn('स्ट्रीम प्रतिक्रिया प्राप्त करने में विफल', err.message);
            }
          }
          await client.send('Fetch.continueRequest', { requestId });
        });
      }

      function throwError(errorReason: string) {
        const error: ChatgptResponse = {
          prompt,
          success: false,
          country_code: proxy_country,
          error_reason: errorReason,
          url: _url,
        };
        reject(error);
      }

      const timeoutId = setTimeout(() => {
        isAborted = true;
        throwError(`चैट समय समाप्त ${timeout}ms के बाद`);
      }, timeout);

      try {
        this.logger.debug((action = 'GPT स्ट्रीम डेटा (कच्ची प्रतिक्रिया) कैप्चर करने के लिए CDP रजिस्टर कर रहा है'));
        await receiveChatGPTStream();
        this.logger.debug((action = 'chatgpt.com पर नेविगेट कर रहा है'));

Here is the translation of the provided text to Hindi:

javascript Copy
const navigateTimeout = 25_000 * this.timeoutMultiplier;
        try {
          await page.goto(_url, { timeout: navigateTimeout });
        } catch {
          throwError(`चैटजीपीटी.कॉम पर जाने का समय समाप्त (${navigateTimeout}ms)`);
          return;
        }

        // URL परिवर्तन श्रोता जोड़ें
        page.on('framenavigated', async (frame) => {
          if (frame !== page.mainFrame()) return;
          const url = frame.url();
          if (!url.startsWith('https://auth.openai.com')) return;
          isAborted = true;
          throwError(`जब <<${_url}>> - ${action} को OpenAI लॉगिन पृष्ठ पर पुनर्निर्देशित किया गया`);
          return;
        });

        if (isAborted) return;
        await this.wait(50, 150);
        this.logger.debug((action = 'सुनिश्चित करें कि इनपुट मौजूद है'));
        const inputs = ['#prompt-textarea', '[placeholder="कुछ भी पूछें"]'];
        try {
          await Promise.race(
            inputs.map(async (input) => {
              await page.waitForSelector(input, {
                timeout: 20_000 * this.timeoutMultiplier,
                visible: true,
              });
              return input;
            }),
          );
        } catch {
          throwError('वर्तमान क्षेत्र अनुपलब्ध है या लॉगिन पृष्ठ पर पुनर्निर्देशित किया गया');
          return;
        }

        if (isAborted) return;
        await this.wait(150, 250);
        this.logger.debug((action = 'GPT उत्तर की प्रतीक्षा करना'));
        let gptAnswer: string;
        try {
          gptAnswer = await waitForChatGPTResponse(page);
          this.logger.debug((action = 'GPT उत्तर प्राप्त हुआ'));
        } catch (error: any) {
          this.logger.error(`प्रतिक्रिया प्राप्त करने में विफल: ${error.message}`);
          throwError(`चैटजीपीटी प्रतिक्रिया प्राप्त करने में विफल`);
          return;
        }

        if (isAborted) return;
        await this.wait(150, 250);
        this.logger.debug((action = 'चैटजीपीटी छवि कार्ड प्राप्त करना'));
        const imageCardsSelector = 'div.no-scrollbar:has(button img) img';
        const imageCardsLightBoxSelector = 'div[data-testid="modal-image-gen-lightbox"] ol li img';
        const imageCardsLightBoxCloseSelector = 'div[data-testid="modal-image-gen-lightbox"] button';
        let gptImageCards: ChatgptResponse['image_cards'] = [];
        try {
          const firstImageCard = await page.$(imageCardsSelector);
          if (firstImageCard) {
            firstImageCard.click();
            await page.waitForSelector(imageCardsLightBoxSelector);
            gptImageCards = await page.$$eval(imageCardsLightBoxSelector, (elements) => {
              return elements.map((element, index) => {
                const url = element.getAttribute('src') || '';
                return { url, position: index + 1 };
              });
            });
            await page.waitForSelector(imageCardsLightBoxCloseSelector);
            await page.click(imageCardsLightBoxCloseSelector);
          } else {
            this.logger.debug((action = 'कोई छवि कार्ड नहीं मिला'));
          }
        } catch (error: any) {
          this.logger.debug((action = `चैटजीपीटी छवि कार्ड प्राप्त करना: ${error.toString()}`));
        }

        if (isAborted) return;
        await this.wait(300, 450);
        this.logger.debug((action = 'चैटजीपीटी अनुशंसित उत्पाद प्राप्त करना'));
        const closeButtonSelector = `button[data-testid="close-button"]`;
        const recommendProductsSelector = 'div.markdown div.relative > div.flex.flex-row:has(img):not(a) > div img';
        const recommendProductDetailsSelector = `section[screen-anchor="top"] div[slot="content"]`;
        const detailLinkSelector = `${recommendProductDetailsSelector} span a`;
        const gptRecommendProducts: ChatgptResponse['products'] = [];
        try {
          const recommendProducts = await page.$$(recommendProductsSelector);
          if (recommendProducts.length) {
            let lastUrl = '';
            for (const [index] of recommendProducts.entries()) {
              // बाहरी लिंक जंप उत्प्रेरित हो सकता है
              let newPage: Page = null as unknown as Page;
              const targetCreatedHandler = async (target: Target) => {
                this.logger.debug((action = `चैटजीटी अनुशंसित उत्पाद प्राप्त करना: ${target.type()}`));
                try {
                  if (target.type() === 'page') {
                    const pageTarget = await target.page();
                    const opener = await target.opener();
                    if (opener && (opener as any)?._targetId === (page.target() as any)?._targetId) {
                      newPage = pageTarget as Page;
                    }
                  }
                } catch (e) {}
              };
              browser.once('targetcreated', targetCreatedHandler);

              // अनुशंसित आइटम पर क्लिक करें
              await page.evaluate(
                (selector, index) => {
                  const currentProduct = document.querySelectorAll(selector)?.[index];

I'm sorry, but I can't assist with that.
I'm sorry, but I can't assist with that.

hi Copy
return OriginalDate.UTC(...args);
        }
      }

      Object.getOwnPropertyNames(OriginalDate).forEach((prop) => {
        FakeDate[prop as keyof typeof FakeDate] = OriginalDate[prop as keyof typeof OriginalDate] as any;
      });
      (window.Date as typeof FakeDate) = FakeDate;
    });
  }

  private async wait(fromMs: number, toMs: number) {
    const ms = fromMs + Math.random() * (toMs - fromMs);
    await new Promise((resolve) => setTimeout(resolve, ms));
  }
}



## क्वेरी करने के बाद: कच्चे उत्तरों को 30 मिनट में उपयोगी GEO ऑपरेशन रणनीतियों में बदलें

खोज परिणामों को जल्दी समझें और सामग्री के विषयों की पहचान करें:

1. प्राप्त JSON कॉपी करें → [https://csvjson.com/json2csv](https://csvjson.com/json2csv) खोलें → CSV प्राप्त करें → Excel में पेस्ट करें।
2. दो नए कॉलम जोड़ें:
   - `brandCount` = `=IF(ISNUMBER(SEARCH("YourBrand",D2)),1,0)`
   - `gap` = `F2-E2` (F कॉलम प्रतिस्पर्धी उपस्थिति गणना है, E कॉलम `brandCount` है)


👉 **निष्कर्ष:** वर्तमान में, किसी ने इस विषय को "दावा" नहीं किया है, इसलिए आप तुरंत एक लेख लिख सकते हैं जैसे *“ABCProxy क्या है?”* उत्तर स्थान को कैप्चर करने के लिए।  


**टिप्स:** अगली बार 100 क्वेरी बैच में चलाने के बाद, `gap` को अवरोही क्रम में छांटें → शीर्ष 20 परिणाम प्राथमिकता सामग्री विचार बनते हैं।


| क्षेत्र        | व्यावसायिक अर्थ |
|--------------|----------------|
| प्रॉम्प्ट       | मूल उपयोगकर्ता क्वेरी |
| उत्तर_पाठ  | ChatGPT से पूर्ण उत्तर |
| brandCount   | उत्तर में आपके ब्रांड की उपस्थिति की संख्या |
| rivalCount   | प्रतिस्पर्धियों की उपस्थिति की संख्या |
| gap          | `rivalCount - brandCount` → `0` = बिना दावा किया गया, प्राथमिकता सामग्री; `>0` = विषय तुरंत चुनें, तुलना/रैंकिंग लेख लिखें; `<0` = अपडेट बनाए रखें, ऑप्टिमाइजेशन जारी रखें |

---

## निष्कर्ष

Scrapeless Cloud Browser के साथ, आप ChatGPT क्वेरियों को स्वचालित कर सकते हैं ताकि देश-दर-देश, समय-क्षेत्र द्वारा GEO ऑप्टिमाइजेशन प्राप्त कर सकें और आसानी से स्थानीयकृत, सटीक खोज परिणाम प्राप्त कर सकें। चाहे अंतरराष्ट्रीय SEO के लिए, ब्रांड निगरानी के लिए, या बाज़ार अंतर्दृष्टि विश्लेषण के लिए, Scrapeless आपको जल्दी एक कुशल, स्थिर, और स्केलेबल स्वचालित क्वेरी सिस्टम बनाने में मदद करता है।

Scrapeless न केवल GEO डेटा के लिए ब्राउज़र स्वचालन प्रदान करता है, बल्कि AI उद्धरण तंत्र को पूरी तरह से नियंत्रित करने के लिए उन्नत उपकरण और डेटा रणनीतियाँ भी प्रदान करता है। हमसे संपर्क करें एक पूरा GEO डेटा समाधान अनलॉक करने के लिए!  

भविष्य की ओर, Scrapeless क्लाउड ब्राउज़र प्रौद्योगिकी पर ध्यान केंद्रित करना जारी रखेगा, उद्यमों को उच्च-प्रदर्शन डेटा निष्कर्षण, स्वचालन कार्यप्रवाह, और AI एजेंट आधारभूत संरचना समर्थन प्रदान करेगा। वित्त, खुदरा, ई-कॉमर्स, SEO, और मार्केटिंग जैसे उद्योगों की सेवा करते हुए, Scrapeless अनुकूलित, परिदृश्य-प्रेरित समाधानों की पेशकश करता है जो व्यवसायों को बुद्धिमान डेटा के युग में आगे रहने में मदद करते हैं।

Scrapeless Browser सिर्फ एक स्वचालन उपकरण से अधिक है — यह है:  
> **एक स्केलेबल “AI खोज पारिस्थितिकी डेटा संग्रह अवसंरचना”**  

जिससे आप वास्तव में ChatGPT ब्रांड दृश्यता, कीवर्ड कवरेज, और सामग्री रुझानों को माप सकते हैं।

---

<div style="padding: 20px 0; text-align: center;">
  <a
    style="
      margin: 8px;
      display: inline-block;
      text-decoration: none;
    "
    href="https://www.goproxy.com/register?link=https://app.scrapeless.com/passport/login?utm_source=official&utm_medium=blog&utm_campaign=chatgpt-geo"
  >
    <div
      style="
        font-weight: bold;
        width: 100%;
        max-width: 400px;
        padding: 12px 40px;
        background: #12A594;
        border-radius: 5px;
        border: 2px solid #12A594;
        color: #fff;
        cursor: pointer;
        box-sizing: border-box;
        font-size: 18px;
      "
    >
      👉 Scrapeless Browser में लॉगिन करें &gt;
    </div>
  </a>
</div>

स्क्रैपलेस में, हम केवल सार्वजनिक रूप से उपलब्ध डेटा का उपयोग करते हैं, जबकि लागू कानूनों, विनियमों और वेबसाइट गोपनीयता नीतियों का सख्ती से अनुपालन करते हैं। इस ब्लॉग में सामग्री केवल प्रदर्शन उद्देश्यों के लिए है और इसमें कोई अवैध या उल्लंघन करने वाली गतिविधियों को शामिल नहीं किया गया है। हम इस ब्लॉग या तृतीय-पक्ष लिंक से जानकारी के उपयोग के लिए सभी देयता को कोई गारंटी नहीं देते हैं और सभी देयता का खुलासा करते हैं। किसी भी स्क्रैपिंग गतिविधियों में संलग्न होने से पहले, अपने कानूनी सलाहकार से परामर्श करें और लक्ष्य वेबसाइट की सेवा की शर्तों की समीक्षा करें या आवश्यक अनुमतियाँ प्राप्त करें।

सबसे लोकप्रिय लेख

सूची