def exposeFunction(self, name: str, puppeteerFunction: Callable
) -> None:
"""Execute function on this page."""
if self._pageBindings[name]:
raise PageError(f'Failed to add page binding with name {name}: '
'window["{name}"] already exists!')
self._pageBindings[name] = puppeteerFunction
addPageBinding = '''
function addPageBinding(bindingName) {
window[bindingName] = async(...args) => {
const me = window[bindingName];
let callbacks = me['callbacks'];
if (!callbacks) {
callbacks = new Map();
me['callbacks'] = callbacks;
}
const seq = (me['lastSeq'] || 0) + 1;
me['lastSeq'] = seq;
const promise = new Promise(fulfill => callbacks.set(seq, fulfill));
// eslint-disable-next-line no-console
console.debug('driver:page-binding', JSON.stringify({name: bindingName, seq, args}));
return promise;
};
}
''' # noqa: E501
expression = helper.evaluationString(addPageBinding, name)
await self._client.send('Page.addScriptToEvaluateOnNewDocument',
{'source': expression})
await self._client.send('Runtime.evaluate', {
'expression': expression,
'returnByValue': True
})
评论列表
文章目录