Skip to content

Instantly share code, notes, and snippets.

@juanpablocs
Last active September 4, 2023 20:10
Show Gist options
  • Save juanpablocs/1d2a2246237c21b2d2533346a4dab0a9 to your computer and use it in GitHub Desktop.
Save juanpablocs/1d2a2246237c21b2d2533346a4dab0a9 to your computer and use it in GitHub Desktop.
Ver RUC de la Sunat con node.js sin captcha. Simple y rápido.

Ruc Sunat

Obtener resultados sin necesidad de captcha ni ocr. Simple código

Instalar paquetes

npm init -y
npm i request cheerio --save

Run

node index.js

Code

archivo: index.js

/**
* @author Juan Pablo <juanpablocs21@gmail.com>
* @description usage two package npm `request` and `cheerio`
* replace `HERE NUMBER RUC` and run > node index.js
*/
const request = require('request').defaults({jar: true});
const cheerio = require('cheerio');

const clean   = str => str.replace(/\s+/g, ' ');
const urlCode = 'http://e-consultaruc.sunat.gob.pe/cl-ti-itmrconsruc/captcha?accion=random';
const urlPost = 'http://e-consultaruc.sunat.gob.pe/cl-ti-itmrconsruc/jcrS00Alias';

const ruc = 'HERE NUMBER RUC';

request(urlCode, (err, response, code)=> {
  const formData = {
    nroRuc:ruc, 
    accion:'consPorRuc', 
    numRnd: code
  };
  request.post({url:urlPost, form: formData}, (err, response, body)=>{ 
    if (!err && response.statusCode == 200) {
      const $ = cheerio.load(body);
      const $table = $(".form-table").eq(2);
      $table.find('tr').each((i, el)=>{
        const a = $(el).find('td[colspan=1]');
        const b = $(el).find('td[colspan=3]');
        console.log(clean(a.text()),'...', clean(b.text()));
      });
      return;
    }
    console.log('error fetch ruc');
  });
});
@NetRevolutions
Copy link

He intentado consumir la url desde nodeJS, me devuelve status 200 pero devuelve un error indicando que consulte al administrador.
Alguna idea???
Aqui coloco mi codigo, espero alguien le sirva y de paso me indique donde esta el error:

const request = require('request').defaults({jar: true});
const cheerio = require('cheerio');

const clean   = str => str.replace(/\s+/g, ' ');
const urlCode = 'https://e-consultaruc.sunat.gob.pe/cl-ti-itmrconsmulruc/captcha?accion=random';
const urlPost = 'https://e-consultaruc.sunat.gob.pe/cl-ti-itmrconsruc/jcrS00Alias';

const sunatData = ( ruc ) => {
    let promise1 = new Promise((resolve, reject) => {
        request( urlCode, (err, res, code) => {
            const formData = {
                nroRuc: ruc,
                accion: 'consPorRuc',
                numRnd: code,
                contexto: 'ti-it',
                modo: '1',
                rbtnTipo: '1',
                search1: ruc,
                tipdoc: '1',
                actReturn: '1'                
            };

            if (err) {
                console.log(err);
                reject( 'No se pudo consultar la url para obtener el codigo');
            } else {
                resolve({                    
                    formData
                });            
            }            
        });        
    });

    return promise1.then(result =>{
        return new Promise((resolve, reject) => {
            request.post({ url: urlPost, form: result.formData}, (err, response, body) => {
                if ( !err && response.statusCode == 200) {
                    const $ = cheerio.load( body );
                    const $table = $(".form-table").eq(2);
                    const htmlData = '';
                    $table.find('tr').each((i, el) => {
                        const a = $(el).find('td[colspan=1]');
                        const b = $(el).find('td[colspan=3]');
                        //console.log(clean(a.text()),'...', clean(b.text()));
                        htmlData += clean(a.text()) + '...' + clean(b.text());
                    });

                    resolve({
                        //ruc: result.ruc,
                        statusCode: response.statusCode,
                        formData: result.formData,
                        body,
                        //htmlData
                    });
                } else {
                    console.log(err);
                    reject( 'No se pudo obtener los datos de Sunat' );
                }
            });
            //resolve(result.formData);
        });

    }, error => {
        console.log('Se produjo un error en la 2da promesa');
    });    
};

module.exports = {
    sunatData
}

Este es el mensaje que obtengo:
image
image

Saludos y Gracias
Jose R.

@Jean45612
Copy link

He intentado consumir la url desde nodeJS, me devuelve el estado 200 pero devuelve un error indicando que consulta al administrador. Alguna idea??? Aqui coloco mi codigo, espero que alguien le sirva y de paso me indique donde esta el error:

const request = require('request').defaults({jar: true});
const cheerio = require('cheerio');

const clean   = str => str.replace(/\s+/g, ' ');
const urlCode = 'https://e-consultaruc.sunat.gob.pe/cl-ti-itmrconsmulruc/captcha?accion=random';
const urlPost = 'https://e-consultaruc.sunat.gob.pe/cl-ti-itmrconsruc/jcrS00Alias';

const sunatData = ( ruc ) => {
    let promise1 = new Promise((resolve, reject) => {
        request( urlCode, (err, res, code) => {
            const formData = {
                nroRuc: ruc,
                accion: 'consPorRuc',
                numRnd: code,
                contexto: 'ti-it',
                modo: '1',
                rbtnTipo: '1',
                search1: ruc,
                tipdoc: '1',
                actReturn: '1'                
            };

            if (err) {
                console.log(err);
                reject( 'No se pudo consultar la url para obtener el codigo');
            } else {
                resolve({                    
                    formData
                });            
            }            
        });        
    });

    return promise1.then(result =>{
        return new Promise((resolve, reject) => {
            request.post({ url: urlPost, form: result.formData}, (err, response, body) => {
                if ( !err && response.statusCode == 200) {
                    const $ = cheerio.load( body );
                    const $table = $(".form-table").eq(2);
                    const htmlData = '';
                    $table.find('tr').each((i, el) => {
                        const a = $(el).find('td[colspan=1]');
                        const b = $(el).find('td[colspan=3]');
                        //console.log(clean(a.text()),'...', clean(b.text()));
                        htmlData += clean(a.text()) + '...' + clean(b.text());
                    });

                    resolve({
                        //ruc: result.ruc,
                        statusCode: response.statusCode,
                        formData: result.formData,
                        body,
                        //htmlData
                    });
                } else {
                    console.log(err);
                    reject( 'No se pudo obtener los datos de Sunat' );
                }
            });
            //resolve(result.formData);
        });

    }, error => {
        console.log('Se produjo un error en la 2da promesa');
    });    
};

module.exports = {
    sunatData
}

Este es el mensaje que obtengo: imagen imagen

Saludos y gracias José R.

Hola colega, yo también tengo el mismo problema.
He estado probando distintas formas de solucionar el problema pero no he tenido exito.
Lograste encontrar una solución?

Gracias.
Saludos.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment