Когда вы говорите, что реальные данные могут быть намного длиннее, это мешает вам хранить список значений смещения под рукой?
offset_values = [i['offset'] for i in test_data]
bisect.bisect(offset_values, 1900)
Ваш метод кажется мне хорошим.
Поскольку вы открыты для предложений, я предлагаю 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
(node:8591) UnhandledPromiseRejectionWarning: Error: Evaluation failed: TypeError: Cannot read property 'stopPropagation' of undefined
– Evgeny Gil 13 July 2018 в 09:27page.hist
, вероятно, зависит от цели события. Обновлен ответ – Vaviloff 13 July 2018 в 09:39<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:14puppeteer.launch({headless : false})
и Devtools open, что может помочь. – Vaviloff 13 July 2018 в 11:47