сравнивая innerText / textContent со значением внутри переменной - PullRequest
0 голосов
/ 26 июня 2018

Я использую Nightmare.js для создания веб-страниц и пытаюсь добавить идентификатор к кнопке с определенным текстом, чтобы я мог щелкнуть по ней, поскольку страница динамически генерируется с помощью JavaScript. Код ниже не работает, потому что по какой-то причине я не могу использовать переменную внутри indexOf в операторе if.

const Nightmare = require('nightmare')
const nightmare = Nightmare({ show: false })
const rp = require('request-promise');
const cheerio = require('cheerio');

var size = "9";

nightmare
  .goto('https://www.flightclub.com/')
  .type('#search', 'air jordan 4 cactus jack \u000d')
  .wait(1000)
  .click('.result-thumbnail')
  .evaluate(() => {
    var correctSize = document.getElementsByTagName('button');
    for (var i = 0; i < correctSize.length; i++) {
      if (correctSize[i].textContent.indexOf(size) > -1) correctSize[i].id = 'thisone';
    }
  })
  .click('button[id=thisone]')
  .end()
  .catch(error => {
    console.error('Search failed:', error)
  })

Тем не менее, это работает, если я изменю его на

if (correctSize[i].textContent.indexOf("9") > -1) correctSize[i].id ='thisone';

, где "9" заменяет size. Есть ли причина, почему я не могу сделать indexOf для переменной, но могу с обычной строкой того же значения? Как я могу это исправить?

1 Ответ

0 голосов
/ 26 июня 2018

Переменная - это не то, что вы определили в области видимости узла, поскольку оценка выполняется в области видимости браузера. Вам нужно передать переменную для оценки, как показано ниже

  .evaluate((____size) => {
    var correctSize = document.getElementsByTagName('button');
    for (var i = 0; i < correctSize.length; i++) {
      if (correctSize[i].textContent.indexOf(____size) > -1) correctSize[i].id = 'thisone';
    }
  }, (____size))

тогда работает

Предполагая, что вы назвали переменную ____ size ...

...