mirror of
https://github.com/puppeteer/puppeteer
synced 2024-06-14 14:02:48 +00:00
In page object example
This commit is contained in:
parent
1a50403090
commit
e1f3715a2d
55
examples/inpageobject.js
Normal file
55
examples/inpageobject.js
Normal file
@ -0,0 +1,55 @@
|
|||||||
|
/**
|
||||||
|
* Copyright 2017 Google Inc. All rights reserved.
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
let Browser = require('../lib/Browser');
|
||||||
|
let browser = new Browser();
|
||||||
|
|
||||||
|
browser.newPage().then(async page => {
|
||||||
|
// Forward console logs from the page into node
|
||||||
|
page.on('console', console.log);
|
||||||
|
|
||||||
|
// Set up a textarea on the page
|
||||||
|
page.setContent('<textarea autofocus></textarea>');
|
||||||
|
|
||||||
|
// Recieve messages from the page
|
||||||
|
await page.setInPageCallback('__sendToPuppeteer', async (msg, ...args) => {
|
||||||
|
let obj = {page, browser};
|
||||||
|
let parent = null;
|
||||||
|
for (let property of msg.split('.')) {
|
||||||
|
parent = obj;
|
||||||
|
obj = obj[property];
|
||||||
|
}
|
||||||
|
return obj.apply(parent, args);
|
||||||
|
});
|
||||||
|
|
||||||
|
await page.evaluate(async function() {
|
||||||
|
function makeProxy(prefix) {
|
||||||
|
return new Proxy((...args) => __sendToPuppeteer(prefix, ...args), {
|
||||||
|
get(obj, method) {
|
||||||
|
return makeProxy(prefix + '.' + method);
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
// now `puppeteer` is a proxy for the `page` object in node
|
||||||
|
let puppeteer = makeProxy('page');
|
||||||
|
|
||||||
|
// We can type into the page, directly from the page!
|
||||||
|
await puppeteer.type('asdf 123 !@#');
|
||||||
|
|
||||||
|
console.log(document.querySelector('textarea').value);
|
||||||
|
});
|
||||||
|
browser.close();
|
||||||
|
});
|
Loading…
Reference in New Issue
Block a user