Page Operations
Rize provides some basic operations for page such as navigation and authentication.
Navigation
The most common operation is visit a page by using goto
method.
rize.goto('http://example.com')
And, you can go forward, go back and refresh current page:
rize.forward()
rize.back()
rize.refresh()
Page configuration
You can specify user agent string:
rize.withUserAgent(/* user agent */)
HTTP authentication:
rize.withAuth('username', 'password')
HTTP headers:
rize.withHeaders({/* extra headers */})
Evaluating function in page
Basic usage
You can evaluating function or expression in browser context. Note that it is in browser not in Node.js, so if you want to do something in Node.js environment, please use execute
method.
rize.evaluate(() => console.log('output in browser not node.js'))
You can pass a string and it will be treated as an expression:
rize.evaluate('console.log("output in browser not node.js")')
Beginners may make a mistake to visit variables directly:
// Don't do like this!
const greeting = 'hi'
rize.evaluate(() => console.log(greeting))
As mentioned above, the function or expression will be evaluated in browser context. However, the variable greeting
was not existed in browser context. (Unless the page really defined it or you have defined it.) So the code above will throw a ReferenceError
.
The solution is write a function with parameter(s) and pass argument(s) manually like this:
const greeting = 'hi'
rize.evaluate(message => console.log(message), greeting) // Works!
Retrieve return value
To keep the API chainable, the evaluate
method doesn't return the value of your function or expression and it will return the current Rize
instance, though your function or expression will return something.
There is another method called evaluateWithReturn
and it can let you retrieve the return value(wrapped with Promise
).
(async () => {
const rize = new Rize()
const byExpr = await rize.evaluateWithReturn('document.title')
const byFunc = await rize.evaluateWithReturn(() => document.title)
})()
evaluate
method and execute
method
Difference between TL;DR: The code in evaluate
method will be evaluate in browser while the code in execute
method will be execute in Node.js.
When you use evaluate
method, your function will be stringify (by calling toString
method) and your arguments will be serialized. So if your arguments cannot be serialized some errors will be occurred.
After stringified your function (expression will be passed as string so no need to do that) and serialized your arguments, those code will be sent to browser and evaluated in browser. That means your code can visit variables in browser context (such as window
and document
).
And the execute
method just give you a chance to do something after last operation. All the code will be execute in Node.js. For example, we can log something to a file on the disk:
const fs = require('fs')
const rize = new Rize()
rize
.goto('http://example.com')
.execute(() => fs.writeFileSync('operations.log', 'visiting...'))
You can check out more info by reading documentation of execute
method.
Adding tags
You can add <script>
or <style>
tag to current page, just like injecting some JavaScript code or CSS code.
To add <script>
tag, please use addScriptTag
method; to add <style>
tag, please use addStyleTag
method.
These two method have the same function signature. The first parameter type
can only be url
, path
or content
. The second parameter is value
, which decided by the first parameter.
- If the first parameter
type
isurl
, you should give a URL to a remote JS/CSS file. - If the first parameter
type
ispath
, you should give a path to a local JS/CSS file. - If the first parameter
type
iscontent
, you should give valid JavaScript code/CSS code.
Unless you have specify an old version Chrome/Chromium, you can feel free to use latest ES features.
Multiple pages
Rize supports multiple pages (aka tabs).
You should understand something when using multiple pages in Rize. When you launched puppeteer, there will be two pages. One is created by puppeteer by default and the another one is created by Rize. This is useful if you aren't going to use multiple pages. (You don't need to open a new page manually.)
Open a new page
To open a new page, just call the newPage
method.
rize.newPage()
The newPage
receive two arguments (both are optional). The first one is name
. You can use this to identify different pages and it is useful when you want to switch page.
The second one is options
which has two options.
The force
option is used to replace the old page with the same name
you gave. If force
is true, when you open a new page with duplicated name, existing page will be replaced with this new one. Otherwise, the existing page will be kept and no new page will be created.
The stayCurrent
option is used to determine if stay in current page after new page was created. If stayCurrent
is true, after opened a new page, the active page won't be changed. Otherwise, the active page will be switched to the new page.
Close a page
To close the page, just call closePage
method.
rize.closePage()
Or you can give the name of the page you want to close:
rize.closePage('page1')
Switch to another page
The switchPage
receive one argument and it can be a string or a number.
When it is a string, it means name
. It is the name of the page you want to switch to.
When it is a number, it will find the page by index in the internal array of pages and switch to it.
rize.switchPage(0)
rize.switchPage('page0')