将 innerText/textContent 与变量内的值进行比较
comparing innerText/textContent with a value inside a variable
我正在使用 Nightmare.js 进行网络抓取,并尝试将 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 但可以使用具有相同值的常规字符串?我该如何解决这个问题?
该变量不是您在节点范围内定义的变量,因为评估在浏览器范围内运行。您需要传递变量以进行评估,如下所示
.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...
我正在使用 Nightmare.js 进行网络抓取,并尝试将 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 但可以使用具有相同值的常规字符串?我该如何解决这个问题?
该变量不是您在节点范围内定义的变量,因为评估在浏览器范围内运行。您需要传递变量以进行评估,如下所示
.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...