从页面上的列表中查找单词
Finding words from a list on a page
我目前正在编写一个脚本,该脚本可以检测不良词并在该词出现时发出警报。
我正在使用 puppeteer,它可以访问 chrome 浏览器并且能够在终端中执行 运行 命令。我在控制台中尝试了很多东西,例如 "includes" 但这给出了未定义的错误。 https://love2dev.com/blog/javascript-includes/
我也试过在 Whosebug 上添加答案的代码; find words in html page with javascript
但这在 puppeteer 中不起作用,只有当您将其粘贴到终端中时它才会起作用。本系统只能搜索1个词。我的想法是制作一个包含所有必须过滤的单词的数组。
至此,我已经写了下面的内容了。据我了解,对于 运行 代码,我需要将其放入 evaluate() 的 {} 中。
const puppeteer = require('puppeteer');
(async () => {
const browser = await puppeteer.launch();
const page = await browser.newPage();
const id = new Date();
console.log(id)
await page.goto('https://www.mediamarkt.nl/nl/search.html?query=iphone&searchProfile=onlineshop&channel=mmnlnl', {waitUntil: 'networkidle2'});
const html = await page.evaluate(() => {
return page.includes("mediamarkt");
});
console.log(html)
console.log("it worked, i guess");
})();
这会产生如下错误:
19-07-23T23:38:23.763Z
(node:24944) UnhandledPromiseRejectionWarning: Error: Evaluation failed: ReferenceError: page is not defined
我的问题是,我如何使用这些工具创建一个坏词过滤器,或者我在哪里可以了解更多关于构建它所需的技能。
谢谢
如果你只是想找到所有坏词(例如你有一个坏词数组)并且你想检查页面内容是否包含任何坏词,你可以这样做:
const puppeteer = require('puppeteer');
(async () => {
const browser = await puppeteer.launch();
const page = await browser.newPage();
const id = new Date();
console.log(id)
await page.goto('https://www.mediamarkt.nl/nl/search.html?query=iphone&searchProfile=onlineshop&channel=mmnlnl', {waitUntil: 'networkidle2'});
const blackList = ['home', 'mediamarkt', 'sorteren', 'maakt'];
const pageContent = await page.$eval('body', el => el.textContent);
const result = pageContent.split(/\s+/).filter(text => blackList.includes(text.toLowerCase()));
await browser.close();
console.log("Here is the array of the found words", result);
})();
它将return 页面上所有发现的不良词的数组。希望我能正确回答你的问题。
如果你想找出坏词组(包括空格),你可以试试:
const found = await page.evaluate(() => window.find(elementsToSearchFor));
或
const found = (await page.content()).match(REGEX)
我目前正在编写一个脚本,该脚本可以检测不良词并在该词出现时发出警报。
我正在使用 puppeteer,它可以访问 chrome 浏览器并且能够在终端中执行 运行 命令。我在控制台中尝试了很多东西,例如 "includes" 但这给出了未定义的错误。 https://love2dev.com/blog/javascript-includes/
我也试过在 Whosebug 上添加答案的代码; find words in html page with javascript
但这在 puppeteer 中不起作用,只有当您将其粘贴到终端中时它才会起作用。本系统只能搜索1个词。我的想法是制作一个包含所有必须过滤的单词的数组。
至此,我已经写了下面的内容了。据我了解,对于 运行 代码,我需要将其放入 evaluate() 的 {} 中。
const puppeteer = require('puppeteer');
(async () => {
const browser = await puppeteer.launch();
const page = await browser.newPage();
const id = new Date();
console.log(id)
await page.goto('https://www.mediamarkt.nl/nl/search.html?query=iphone&searchProfile=onlineshop&channel=mmnlnl', {waitUntil: 'networkidle2'});
const html = await page.evaluate(() => {
return page.includes("mediamarkt");
});
console.log(html)
console.log("it worked, i guess");
})();
这会产生如下错误:
19-07-23T23:38:23.763Z
(node:24944) UnhandledPromiseRejectionWarning: Error: Evaluation failed: ReferenceError: page is not defined
我的问题是,我如何使用这些工具创建一个坏词过滤器,或者我在哪里可以了解更多关于构建它所需的技能。
谢谢
如果你只是想找到所有坏词(例如你有一个坏词数组)并且你想检查页面内容是否包含任何坏词,你可以这样做:
const puppeteer = require('puppeteer');
(async () => {
const browser = await puppeteer.launch();
const page = await browser.newPage();
const id = new Date();
console.log(id)
await page.goto('https://www.mediamarkt.nl/nl/search.html?query=iphone&searchProfile=onlineshop&channel=mmnlnl', {waitUntil: 'networkidle2'});
const blackList = ['home', 'mediamarkt', 'sorteren', 'maakt'];
const pageContent = await page.$eval('body', el => el.textContent);
const result = pageContent.split(/\s+/).filter(text => blackList.includes(text.toLowerCase()));
await browser.close();
console.log("Here is the array of the found words", result);
})();
它将return 页面上所有发现的不良词的数组。希望我能正确回答你的问题。
如果你想找出坏词组(包括空格),你可以试试:
const found = await page.evaluate(() => window.find(elementsToSearchFor));
或
const found = (await page.content()).match(REGEX)