Используйте Cheerio, чтобы получить значение переменной внутри тега скрипта - PullRequest
0 голосов
/ 27 января 2020

172/5000 Добрый день! Я пытаюсь получить значение переменной "var JS_WCACHE_CK =" внутри тега, но я уже тестировал и пытался адаптировать некоторые коды, но безуспешно.

<script>
    var JS_IDIOMA = "pt";
    var JS_LINK_ROOT = "https://tabuademares.com";
    var JS_RUTA_ASSETS = "/assets/";
    var CONF_FORMATO_HORA = 1;
    window.google_analytics_uacct = "UA-8166479-17";
    var JS_URL_ACTUAL="%2Fbr%2Fespirito-santo%2Fvitoria";
    var JS_FECHA_ACTUAL="2020-01-26+19%3A00";
    var JS_CODIGO_ESTACION="br56";
    var JS_WCACHE_CK="Mjg5Ng==";
    var JS_ACTIVAR_SERVIDOR_BACKUP=1;
    var JS_LATITUD="-20.32352";
    var JS_LONGITUD="-40.29919";
    var JS_ZOOM="12";   
</script>

Ссылка на сайт: https://tabuademares.com/br/espirito-santo/vitoria

1 Ответ

1 голос
/ 27 января 2020

Я бы сказал, что Cheerio - это не то, что вам нужно. Более подходящим также является Puppeteer , так как вам нужно что-то, что не только анализирует html, но также имеет языковой движок, чтобы вы могли взаимодействовать на скрипте страницы, не делая злых дел, таких как eval :

import { Browser, launch, Page, Response } from "puppeteer";

export class JsVarService {
  private browser!: Browser;
  private page!: Page;

  constructor(private url: string) {}

  public async getVarValue(varName: string): Promise<string> {
    await this.getResponse();
    const results = <string>await this.page.evaluate(`window["${varName}"]`);
    await this.close();
    return results;
  }

  private async getResponse(): Promise<Response | null> {
    this.browser = await launch();
    this.page = await this.browser.newPage();
    return this.page.goto(this.url);
  }

  private async close(): Promise<void> {
    this.browser.disconnect();
  }
}

async function run(): Promise<void> {
  const url = "https://tabuademares.com/br/espirito-santo/vitoria";
  const varName = "JS_WCACHE_CK";
  const service = new JsVarService(url);
  console.log(await service.getVarValue(varName));
}

run().catch(e => { throw new Error(e) });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...