# Site Dinamico e SPA

# Exemplo 1

Para inicio do projeto, criar um diretorio para o mesmo e dentro criar dele digitar yarn init.

Criar um arquivo index.js

Instalar as dependencias

yarn add cheerio nightmare
1

O conteudo do index.js será este

const Nightmare = require('nightmare');
const cheerio = require('cheerio');

const nightmare = Nightmare({ show: true })
const url = 'https://algumsite.com.br';

// Request making using nightmare
nightmare
  .goto(url)
  .wait('body')
  .evaluate(() => document.querySelector('body').innerHTML)
  .end()
.then(response => {
  console.log(getData(response));
}).catch(err => {
  console.log(err);
});

// Parsing data using cheerio
let getData = html => {
  data = [];
  const $ = cheerio.load(html);
  $('table.itemlist tr td:nth-child(3)').each((i, elem) => {
    data.push({
      title : $(elem).text(),
      link : $(elem).find('a.storylink').attr('href')
    });
  });
  return data;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30

# Exemplo 2 - Mostra como abrir um popup

const Nightmare = require('nightmare');
require('nightmare-window-manager')(Nightmare)
const cheerio = require('cheerio');

var nightmare = Nightmare({ 
  /*
  openDevTools: {
    mode: 'detach'
  },
  */
  show: true
})
const url = 'https://algumsite.com.br';

// Request making using nightmare
nightmare
  .windowManager()
  .goto(url)
  .wait('body')
  .click('button.social-provider-btn.msft')
  .waitWindowLoad()
  .focusWindow(2)
  .closeWindow(1)
  .wait('body')
  // .wait('body.cb.DejaVue')
  // .click('input.form-control ltr_override')    
  // .evaluate(() => document.querySelector('div.wrapper input').innerHTML)
  // .end()
  .then(response => {
    console.log(response);
  }).catch(err => {
    console.log(err);
  });

// Parsing data using cheerio
let getData = html => {
  data = [];
  const $ = cheerio.load(html);
  $('div._1HmYoV._35HD7C:nth-child(2) div.bhgxx2.col-12-12').each((row, raw_element) => {
    $(raw_element).find('div div div').each((i, elem) => {
      let title = $(elem).find('div div a:nth-child(2)').text();
      let link = $(elem).find('div div a:nth-child(2)').attr('href');
      if (title) {
        data.push({
          title : title,
          link : link
        });
      }
    });
  });
  return data;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52

No package.json incluir um script que rode o comando yarn index.js.