Как эмулировать манипулятор мыши или запускать JS-функцию на странице с помощью PhantomJS в NodeJS

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

offset_values = [i['offset'] for i in test_data]
bisect.bisect(offset_values, 1900)

Ваш метод кажется мне хорошим.

0
задан Evgeny Gil 13 July 2018 в 09:34
поделиться

1 ответ

Поскольку вы открыты для предложений, я предлагаю puppeteer . Это собственный модуль node.js, который открывает страницы в новейшем Chromium (особенно полезно, поскольку PhantomJS очень устарел) и близок к PhantomJS в терминах

Если вы также используете node.js 8.x, синтаксис async / await доступен для работы с обещаниями, и он делает скремблер с кукольным веером.

Итак, чтобы запустите эту функцию в кукловоде, который вы запустите

await page.evaluate(() => page.hist(this,'P-0.00-0-0','355svxv498x0x0',417,event,0,1) );

Update

В кукольном купе есть много помощников по удобству, одна из которых - page.hover , которая буквально будет наведите указатель на элемент:

await page.hover('td.some_selector');

Но если вы хотите продолжить использовать Phantomjs и отличный модуль phantom, вы можете:

_page.evaluate(function() {
    page.hist(this,'P-0.00-0-0','355svxv498x0x0',417,event,0,1)
})

Документы на page.evaluate: http://phantomjs.org/api/webpage/method/evaluate.html

2
ответ дан Vaviloff 17 August 2018 в 13:19
поделиться
  • 1
    Попробуйте сделать это с кукловодом, но получите (node:8591) UnhandledPromiseRejectionWarning: Error: Evaluation failed: TypeError: Cannot read property 'stopPropagation' of undefined – Evgeny Gil 13 July 2018 в 09:27
  • 2
    page.hist, вероятно, зависит от цели события. Обновлен ответ – Vaviloff 13 July 2018 в 09:39
  • 3
    Кажется, это хорошее решение, но на этой странице нет уникальных селекторов в этих divs в таблице, подобных <td><div onmouseout="delayHideTip()" onmouseover="page.hist(this,'P-0.00-0-0','355svxv464x0x7omg8',381,event,0,1)">2.20</div></td>. И я не знаю, какой div i должен наводиться при открытии страницы, когда я даю какой-либо другой селектор (например, таблица), я получаю ту же ошибку с stopPropagation of undefined – Evgeny Gil 13 July 2018 в 10:14
  • 4
    Попробуйте запустить скрипт с Chromium visible puppeteer.launch({headless : false}) и Devtools open, что может помочь. – Vaviloff 13 July 2018 в 11:47
Другие вопросы по тегам:

Похожие вопросы: