JSHandle
JSHandle представляет собой объект JavaScript на странице. JSHandles могут быть созданы с помощью метода page.evaluateHandle().
const windowHandle = await page.evaluateHandle(() => window);
// ...
JSHandle предотвращает сборку мусора для ссылочного объекта JavaScript, если только ссылка не будет удалена с помощью jsHandle.dispose(). JSHandles автоматически удаляются, когда их исходный фрейм переходит на другую страницу или родительский контекст уничтожается.
Экземпляры JSHandle могут использоваться в качестве аргумента в методах page.$eval(), page.evaluate() и page.evaluateHandle().
Методы
asElement
Добавлено до версии v1.9Возвращает либо null, либо сам объект, если объект является экземпляром ElementHandle.
Использование
jsHandle.asElement();
Возвращает
dispose
Добавлено до версии v1.9Метод jsHandle.dispose прекращает ссылку на элемент.
Использование
await jsHandle.dispose();
Возвращает
evaluate
Добавлено до версии v1.9Возвращает значение, возвращаемое pageFunction.
Этот метод передает этот объект в качестве первого аргумента в pageFunction.
Если pageFunction возвращает Promise, то handle.evaluate будет ожидать разрешения промиса и вернет его значение.
Использование
const tweetHandle = await page.$('.tweet .retweets');
expect(await tweetHandle.evaluate(node => node.innerText)).toBe('10 retweets');
Аргументы
-
pageFunctionfunction | string#Функция, которая будет выполнена в контексте страницы.
-
argEvaluationArgument (опционально)#
Необязательный аргумент для передачи в pageFunction.
optionsObject (необязательно)-
exposeFunctionsboolean (необязательно) Добавлено в: v1.62#Если установлено значение
true, функции, переданные внутри arg, становятся доступны на странице и могут вызываться из функции, выполняемой в контексте страницы. Вызов такой функции возвращает Promise с результатом её выполнения. На внутреннем уровне каждая функция предоставляется через page.exposeFunction(), поэтому технически она доступна из всех фреймов страницы. Предоставленные функции удаляются при навигации фрейма верхнего уровня. По умолчанию используется значениеfalse: в этом случае функции не подлежат сериализации, и попытка передать функцию приводит к ошибке.
-
Возвращает
evaluateHandle
Добавлено до версии v1.9Возвращает значение, возвращаемое pageFunction в виде JSHandle.
Этот метод передает этот объект в качестве первого аргумента в pageFunction.
Единственное отличие между jsHandle.evaluate и jsHandle.evaluateHandle заключается в том, что jsHandle.evaluateHandle возвращает JSHandle.
Если функция, переданная в jsHandle.evaluateHandle, возвращает Promise, то jsHandle.evaluateHandle будет ожидать разрешения промиса и вернет его значение.
Смотрите page.evaluateHandle() для получения более подробной информации.
Использование
await jsHandle.evaluateHandle(pageFunction);
await jsHandle.evaluateHandle(pageFunction, arg, options);
Аргументы
-
pageFunctionfunction | string#Функция, которая будет выполнена в контексте страницы.
-
argEvaluationArgument (опционально)#
Необязательный аргумент для передачи в pageFunction.
optionsObject (необязательно)-
exposeFunctionsboolean (необязательно) Добавлено в: v1.62#Если установлено значение
true, функции, переданные внутри arg, становятся доступны на странице и могут вызываться из функции, выполняемой в контексте страницы. Вызов такой функции возвращает Promise с результатом её выполнения. Внутренне каждая функция предоставляется через page.exposeFunction(), поэтому технически она доступна из всех фреймов страницы. Предоставленные функции удаляются при навигации фрейма верхнего уровня. По умолчанию используется значениеfalse: в этом случае функции не подлежат сериализации, и передача функции приводит к ошибке.
-
Возвращает
getProperties
Добавлено до версии v1.9Метод возвращает карту с именами собственных свойств в качестве ключей и экземплярами JSHandle для значений свойств.
Использование
const handle = await page.evaluateHandle(() => ({ window, document }));
const properties = await handle.getProperties();
const windowHandle = properties.get('window');
const documentHandle = properties.get('document');
await handle.dispose();
Возвращает
getProperty
Добавлено до версии v1.9Извлекает одно свойство из ссылочного объекта.
Использование
await jsHandle.getProperty(propertyName);
Аргументы
Возвращает
jsonValue
Добавлено до версии v1.9Возвращает JSON-представление объекта. Если у объекта есть функция toJSON, она не будет вызвана.
Метод вернет пустой JSON-объект, если ссылочный объект не может быть преобразован в строку. Он вызовет ошибку, если объект имеет циклические ссылки.
Использование
await jsHandle.jsonValue();
Возвращает