-
Notifications
You must be signed in to change notification settings - Fork 158
Page#evaluate和Page#evaluateHandle方法介绍
yong fan edited this page Dec 17, 2024
·
1 revision
Page#evaluate 的作用是 在页面内指定一段 JS 函数,这段 JS 函数就是Page#evaluate方法的第一个参数,返回的是 该 JS 函数执行的结果,下面给一个示例:
Object result = page.evaluate("() => console.log('hello', 5, {foo: 'bar'})");
System.out.println(result) //打印 null,因为执行的 JS 函数没有返回值
你可以传递字符串而不是函数(建议使用函数):
page.evaluate("console.log('hello', 5, {foo: 'bar'})");
为了获得最佳的 体验,你应该传入 函数:
page.evaluate("() => console.log('hello', 5, {foo: 'bar'})");
你可以传递参数给执行的 JS 函数:
page.evaluate("async (arg1,arg2,arg3,arg4,arg5) =>{\n" +
" console.log(null == undefined)\n" +
" console.log(-0 == -0.0)\n" +
" console.log(arg1 == null)\n" +
" console.log(arg2 == undefined)\n" +
" console.log(arg3 == -0.0)\n" +
" console.log(arg4 == Infinity)\n" +
" console.log(arg5 == -Infinity)\n" +
"}", null, null,Constant.Navigate_Zero,Constant.Infinity,Constant.Navigate_Infinity);
//该 JS 函数有五个参数,我们在 evaluate 方法上传递了5个参数给它
// Constant.Navigate_Zero = "-0"
// Constant.Infinity = "Infinity"
// Constant.Navigate_Infinity = "-Infinity"
给执行的 JS 函数传递的参数有 6 个特别的数值,下面一 一列举:
参数 | 协议:CDP | 协议WebDriver-BIDI |
---|---|---|
null | null | null or PrimitiveValue.Null |
undefined | null | null or PrimitiveValue.Undefined |
-0 | "-0" | "-0" |
NaN | "NaN" | "NaN" |
Infinity | "Infinity" | "Infinity" |
-Infinity | "-Infinity" | "-Infinity" |
Page.evaluateHandle() 方法的使用与 Page.evaluate() 一致。
Page.evaluate() 和 Page.evaluateHandle() 之间的唯一区别是 evaluateHandle
将返回封装在页内对象中的值。
JSHandle aHandle = page.evaluateHandle("document");//获取页面的document对象
//返回的 JSHandle 还可以作为参数传递
JSHandle resultHandle = page.evaluateHandle(“body => body.innerHTML”, aHandle);
大多数情况下,此函数返回 JSHandle,但如果 执行的JS函数
返回对元素的引用,则会返回 ElementHandledle:
JSHandle button = page.evaluateHandle("() => document.querySelector('button')")
button.asElement().click() //JSHandle 转 ElementHandle,然后执行click