【问题标题】:comparing innerText/textContent with a value inside a variable将 innerText/textContent 与变量内的值进行比较
【发布时间】:2018-06-26 19:15:46
【问题描述】:

我正在使用 Nightmare.js 进行 webscrape,并尝试将 id 添加到具有特定文本的按钮,以便我可以单击它,因为该页面是使用 javascript 动态生成的。下面的代码不起作用,因为由于某种原因,我不能在 if 语句的 indexOf 中使用变量。

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 但可以使用相同值的常规字符串?我该如何解决这个问题?

【问题讨论】:

    标签: javascript html web-scraping nightmare


    【解决方案1】:

    该变量不是您在节点范围内定义的,因为评估在浏览器范围内运行。您需要传递变量以进行如下评估

      .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...

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-13
      • 2022-06-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多