@@ -7,7 +7,7 @@ export default async function({login, q, imports, data, account}, {enabled = fal
7
7
return null
8
8
9
9
//Load inputs
10
- let { url, selector, title, background, viewport, wait} = imports . metadata . plugins . screenshot . inputs ( { data, account, q} )
10
+ let { url, selector, title, background, viewport, wait, mode } = imports . metadata . plugins . screenshot . inputs ( { data, account, q} )
11
11
if ( ! url )
12
12
throw { error : { message : "URL is not set" } }
13
13
@@ -23,19 +23,35 @@ export default async function({login, q, imports, data, account}, {enabled = fal
23
23
await new Promise ( solve => setTimeout ( solve , wait ) )
24
24
25
25
//Screenshot
26
+ let content = null
27
+ let image = null
28
+ const metadata = { height :null , width :null }
26
29
await page . waitForSelector ( selector )
27
- const clip = await page . evaluate ( selector => {
28
- const { x, y, width, height} = document . querySelector ( selector ) . getBoundingClientRect ( )
29
- return { x, y, width, height}
30
- } , selector )
31
- console . debug ( `metrics/compute/${ login } /plugins > screenshot > coordinates ${ JSON . stringify ( clip ) } ` )
32
- const [ buffer ] = await imports . record ( { page, ...clip , frames : 1 , background} )
33
- const screenshot = await imports . sharp ( Buffer . from ( buffer . split ( "," ) . pop ( ) , "base64" ) ) . resize ( { width : Math . min ( 454 * ( 1 + data . large ) , clip . width ) } )
34
- const metadata = await screenshot . metadata ( )
30
+ switch ( mode ) {
31
+ case "image" :{
32
+ const clip = await page . evaluate ( selector => {
33
+ const { x, y, width, height} = document . querySelector ( selector ) . getBoundingClientRect ( )
34
+ return { x, y, width, height}
35
+ } , selector )
36
+ console . debug ( `metrics/compute/${ login } /plugins > screenshot > coordinates ${ JSON . stringify ( clip ) } ` )
37
+ const [ buffer ] = await imports . record ( { page, ...clip , frames : 1 , background} )
38
+ const screenshot = await imports . sharp ( Buffer . from ( buffer . split ( "," ) . pop ( ) , "base64" ) ) . resize ( { width : Math . min ( 454 * ( 1 + data . large ) , clip . width ) } )
39
+ image = `data:image/png;base64,${ ( await screenshot . toBuffer ( ) ) . toString ( "base64" ) } `
40
+ Object . assign ( metadata , await screenshot . metadata ( ) )
41
+ break
42
+ }
43
+ case "text" :{
44
+ content = await page . evaluate ( selector => document . querySelector ( selector ) ?. innerText ?? "" , selector )
45
+ break
46
+ }
47
+ default :
48
+ throw { error : { message : `Unsupported mode "${ mode } "` } }
49
+ }
50
+
35
51
await browser . close ( )
36
52
37
53
//Results
38
- return { image : `data: image/png;base64, ${ ( await screenshot . toBuffer ( ) ) . toString ( "base64" ) } ` , title, height : metadata . height , width : metadata . width , url}
54
+ return { mode , image, content , title, height : metadata . height , width : metadata . width , url}
39
55
}
40
56
//Handle errors
41
57
catch ( error ) {
0 commit comments