点击随机 Google 使用 NodeJS 和 Puppeteer 搜索结果?
Click on random Google Search result using NodeJS and Puppeteer?
我正在尝试制作一个小脚本,以便在搜索“'what is ' + Word”后点击随机 Google 搜索结果。我所做的一切都无法获得我想要的结果,哎呀,我什至无法让脚本单击单个 Google 搜索结果!
我在这里尝试过做很多事情,例如将所有搜索结果收集到一个数组中并随机点击一个(没有收集到数组中),通过部分文本点击一个元素(https:// brought无结果),以及许多在 Python 中有效但在此处无效的其他解决方案。
const puppeteer = require('puppeteer');
const searchbar = "#tsf > div:nth-child(2) > div > div.RNNXgb > div > div.a4bIc > input"
async function gsearch() {
const browser = await puppeteer.launch({headless:false, args:['--no-sandbox', '--disable-setuid-sandbox']});
const page = await browser.newPage();
await page.goto('https://google.com');
var fs = require("fs");
var array = fs.readFileSync("words.txt").toString().split('\n');
var random = array[Math.floor(Math.random() * array.length)]
await page.click(searchbar)
await page.keyboard.type("what is " + random);
await page.waitFor(1000);
await page.evaluate(() => {
let elements = $('LC20lb').toArray();
for (i = 0; i < elements.length; i++) {
$(elements[i]).click();
}
})
}
gsearch();
(忽略任何缩进继承错误,我发誓它在 VSC 中看起来更干净)
预计会点击随机搜索结果。最终什么也没做,可能会出现一两个错误,但仅此而已。
LC20lb
不是 html 标签,它应该是 class h3
的名称,通过使用 $()
你想 select 元素 jQuery?请改用 document.querySelectorAll()
。
const puppeteer = require('puppeteer');
const fs = require("fs");
async function gsearch() {
const browser = await puppeteer.launch({
headless: false,
args: ['--no-sandbox', '--disable-setuid-sandbox']
});
const page = await browser.newPage();
await page.goto('https://google.com');
var array = fs.readFileSync("words.txt").toString().split('\n');
var random = array[Math.floor(Math.random() * array.length)];
// simple selector for search box
await page.click('[name=q]');
await page.keyboard.type("what is " + random);
// you forgot this
await page.keyboard.press('Enter');
// wait for search results
await page.waitForSelector('h3.LC20lb', {timeout: 10000});
await page.evaluate(() => {
let elements = document.querySelectorAll('h3.LC20lb')
// "for loop" will click all element not random
let randomIndex = Math.floor(Math.random() * elements.length) + 1
elements[randomIndex].click();
})
}
我正在尝试制作一个小脚本,以便在搜索“'what is ' + Word”后点击随机 Google 搜索结果。我所做的一切都无法获得我想要的结果,哎呀,我什至无法让脚本单击单个 Google 搜索结果!
我在这里尝试过做很多事情,例如将所有搜索结果收集到一个数组中并随机点击一个(没有收集到数组中),通过部分文本点击一个元素(https:// brought无结果),以及许多在 Python 中有效但在此处无效的其他解决方案。
const puppeteer = require('puppeteer');
const searchbar = "#tsf > div:nth-child(2) > div > div.RNNXgb > div > div.a4bIc > input"
async function gsearch() {
const browser = await puppeteer.launch({headless:false, args:['--no-sandbox', '--disable-setuid-sandbox']});
const page = await browser.newPage();
await page.goto('https://google.com');
var fs = require("fs");
var array = fs.readFileSync("words.txt").toString().split('\n');
var random = array[Math.floor(Math.random() * array.length)]
await page.click(searchbar)
await page.keyboard.type("what is " + random);
await page.waitFor(1000);
await page.evaluate(() => {
let elements = $('LC20lb').toArray();
for (i = 0; i < elements.length; i++) {
$(elements[i]).click();
}
})
}
gsearch();
(忽略任何缩进继承错误,我发誓它在 VSC 中看起来更干净)
预计会点击随机搜索结果。最终什么也没做,可能会出现一两个错误,但仅此而已。
LC20lb
不是 html 标签,它应该是 class h3
的名称,通过使用 $()
你想 select 元素 jQuery?请改用 document.querySelectorAll()
。
const puppeteer = require('puppeteer');
const fs = require("fs");
async function gsearch() {
const browser = await puppeteer.launch({
headless: false,
args: ['--no-sandbox', '--disable-setuid-sandbox']
});
const page = await browser.newPage();
await page.goto('https://google.com');
var array = fs.readFileSync("words.txt").toString().split('\n');
var random = array[Math.floor(Math.random() * array.length)];
// simple selector for search box
await page.click('[name=q]');
await page.keyboard.type("what is " + random);
// you forgot this
await page.keyboard.press('Enter');
// wait for search results
await page.waitForSelector('h3.LC20lb', {timeout: 10000});
await page.evaluate(() => {
let elements = document.querySelectorAll('h3.LC20lb')
// "for loop" will click all element not random
let randomIndex = Math.floor(Math.random() * elements.length) + 1
elements[randomIndex].click();
})
}