Кукловод - Нажмите на объявление

1

Я занимаюсь какой-то независимой работой для парня, который хочет получить информацию о рекламе на своем веб-сайте. Мне нужно нажать на объявление с помощью Puppeteer и получить результирующий URL-адрес страницы.

Вот что я пробовал.

const puppeteer = require('puppeteer');

(async () => {
  const browser = await puppeteer.launch({headless: false});
  const page = await browser.newPage();
  await page.goto('http://example.com/page/ad', {waitUntil: 'networkidle2'});

  await page.click('#aw0')
})();

Он продолжает возвращать Error: No node found for selector: #aw0

  • 3
    Может быть, нет узла для селектора #aw0 , вы видите рекламу, отображаемую в Chrome?
  • 0
    @Luca Luca объявление показывается в Chrome, и я могу перейти к инструментам разработки и использовать document.getElementById.href, и оно работает просто отлично.
Показать ещё 2 комментария
Теги:
puppeteer

2 ответа

1

Нажатие на объявления определенно работает, однако вам нужно будет настроить каждую отдельную рекламную секцию по-разному и остерегаться последствий.

отказ

Прочитайте и используйте содержание ответа на свой страх и риск,

  • Помните, что автоматически нажимать на объявление может привести к запрету в рекламной сети, поскольку есть много способов узнать, был ли щелчок от фактического пользователя или нет.
  • Это было сделано много лет и закончилось плохо. Ниже показано, как это работает, но опять же, ваша учетная запись клиента будет заблокирована наверняка, потому что, если бы я был рекламной сетью, я бы избегал такого простого метода обмана.
  • Некоторые объявления будут вызывать всплывающие окна, поэтому будьте осторожны с процессами призрачного хрома.
  • Стоимость запуска кукловода и рекламного объявления может быть фактически больше, чем маркетинг и такие вещи на веб-сайте.

обзор

Рассмотрите эту страницу с помощью этого простого объявления, если вы попытаетесь проверить, вы увидите iframe, но, пожалуйста, посмотрите iframe внутри iframe и сильно варьируется между рекламными службами и целевым веб-сайтом.

Изображение 174551

Нажатие элемента внутри рамки, внутри рамки...?

Как обсуждалось здесь по этой проблеме, до сих пор мы могли сделать это, чтобы щелкнуть что-то внутри рамки.

await page.goto('https://example.com');
const frame = await page.frames().find(f => f.name() === 'someIframe');
const button = await frame.$('button');
button.click();

Теперь, если мы хотим щелкнуть этот конкретный элемент, что можно сделать? Имя не существует, идентификатор случайный. Переход на фактическую страницу объявления покажет iframe, но снова проверьте выше отказ от ответственности,

Если вы видите, главный iframe src говорит, /ads/adprotect300.aspx, чтобы мы могли открыть его и щелкнуть по элементу. Мы также видим, что iframe имеет имя, начинающееся с mdns. Принимая во внимание все исследования, мы можем подготовить такой код,

const page = await browser.newPage();
await page.goto('http://example.com/ads/adprotect300.aspx', {waituntil: "networkidle0"});
await page.waitFor('iframe');
await page.waitFor(4000); // artificial wait for randomness
const frame = await page.frames().find(f=>f.name().includes('mdns'));
const ad = await frame.$('div > a');
ad.click();

На этом веб-сайте она открыла новую вкладку, как было сказано ранее, она нажала, и теперь нам нужно сделать это, чтобы захватить ссылки для всех открытых вкладок, поэтому, если у нее есть всплывающие окна или перенаправления на новую вкладку, она будет схвачена.

await page.waitFor(2000);
const pages = await browser.pages()
console.log(pages.map(page=>page.url()))

Есть лучшие способы дождаться навигации и все, но я просто показываю, что можно сделать. Результат,

[ 'chrome-search://local-ntp/local-ntp.html',
  'http://example.com/ads/adprotect300.aspx',
  'https://adwebsite/activity/htb/candy/pc?ref=93454&i=704ea49d-7b0b-4c05-b4d0-f0225ecc7154&h=12700290a03e232a14fa0f1cf35e27a346d91f6e&c=878146837666' ]

Позвольте мне еще раз напомнить, что это явно незаконно, и счета могут быть подвергнуты риску. Используйте свою голову на свой страх и риск.

0

Вы можете использовать waitFor, чтобы убедиться, что конкретный селектор доступен в DOM https://github.com/GoogleChrome/puppeteer/blob/master/docs/api.md#framewaitforselectororfunctionortimeout-options-args

  • 0
    Я попробовал это, и это просто зависает. Может ли это быть потому, что реклама создается в JS?
  • 1
    Он зависает / ждет (и заканчивается timeOut), если селектор недоступен.
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню