вставить jquery на страницу кукловода

Я пытаюсь ввести jquery на страницу моего кукловода, потому что document.querySelector не режет это для меня:

async function inject_jquery(page){
  await page.evaluate(() => {
    var jq = document.createElement("script")
    jq.src = "https://code.jquery.com/jquery-3.2.1.min.js"
    document.querySelector("head").appendChild(jq)
  })
  const watchDog = page.waitForFunction('window.jQuery !== undefined');
  await watchDog;
}

В результате это в основном время. у кого-нибудь есть решение?

Ответы

Ответ 1

Я использовал page.addScriptTag для ввода js файлов.

...
await page.addScriptTag({url: 'https://code.jquery.com/jquery-3.2.1.min.js'})
...

page.addScriptTag - документация

Рабочий пример с использованием puppeteer: 0.12.0

import { launch } from 'puppeteer'
(async () => {
    const browser = await launch({headless: false});
    const page = await browser.newPage();
    await page.goto('https://example.com', {waitUntil: 'networkidle'});
    await page.addScriptTag({url: 'https://code.jquery.com/jquery-3.2.1.min.js'});
    await page.close();
    await browser.close();
})();

Ответ 2

Для тех, кто хочет ввести локальную копию jQuery:

await page.addScriptTag({path: require.resolve('jquery')})

Ответ 3

Я делаю это:

await page.addScriptTag({ url: 'https://code.jquery.com/jquery-3.2.1.min.js' });
const title = await page.evaluate(() => {
  const $ = window.$; //otherwise the transpiler will rename it and won't work
  return $('h1 > span').text();
});

Ответ 4

Это работает для меня.

async function inject_jquery(page){
      await page.evaluate(() => {
        var jq = document.createElement("script")
        jq.setAttribute('type','text/javascript');
        jq.src = "https://code.jquery.com/jquery-3.2.1.min.js"
        return new Promise( (resolve) => {
            jq.addEventListener("load", ()=> {
                resolve();
            });
            document.getElementsByTagName("head")[0].appendChild(jq);
        });
      })
      const watchDog = page.waitForFunction('window.jQuery !== undefined');
      await watchDog;
    }

Ответ 5

Некоторые сайты не позволяют вводить тег скрипта, поэтому вам придется внедрить его содержимое, прежде чем он позволит вам сделать это. В этом случае вы можете использовать метод evaluate чтобы получить содержимое сценариев из CDN и ввести их вручную:

const jquery = await page.evaluate(() => window.fetch('https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js').then((res) => res.text()));
await page.goto(YOUR_PAGE_HERE);
await page.evaluate(jquery);

Это используется при просмотре документации кукловода без браузера (я являюсь автором этого инструмента), если вы хотите увидеть пример в дикой природе.

Ответ 6

Управлять становится легче, если вы вставляете свой скрипт в заголовок своей HTML-страницы, если у вас получилось вот так

<script type="text/javascript" src="abc.min.js"></script>

и теперь вы можете легко вызвать его функцию на своей странице .evaluate(function() {})