使用NodeJS和Puppeteer点击随机Google搜索结果?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (1)
  • 关注 (0)
  • 查看 (128)

我正在尝试制作一个小脚本来点击随机的Google搜索结果。我所做的一切都没能让我得到我想要的结果,哎呀,我甚至无法让脚本点击一个Google搜索结果!

我已尝试在这里做多个事情,例如收集数组中的所有搜索结果并单击一个随机的(没有收集到数组中),通过部分文本单击元素(https://没有结果),以及许多其他解决方案在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标签,它应该是h3类名。并且通过使用$() 你试图用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();
  })
}

所属标签

可能回答问题的人

  • 天使的炫翼

    17 粉丝531 提问36 回答
  • 富有想象力的人

    3 粉丝0 提问29 回答
  • o o

    4 粉丝494 提问27 回答
  • 学生

    3 粉丝476 提问27 回答

扫码关注云+社区

领取腾讯云代金券