-
Notifications
You must be signed in to change notification settings - Fork 0
/
one.js
95 lines (66 loc) · 2.28 KB
/
one.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
import playwright from 'playwright'
import yargs from 'yargs'
import { hideBin } from 'yargs/helpers'
import path from 'node:path'
const argv =
yargs(hideBin(process.argv))
.command('transform', 'Transform PNG to SVG', {
filePath: {
description: 'Path to a file to parse',
type: 'string',
require: true
},
outputDir: {
description: 'Path to a directory where output files will be placed',
type: 'string',
require: true
},
newFileName: {
description: 'New file name. If omitted, fileToParse name will be used',
type: 'string'
}
})
.help()
.argv
async function start() {
const browser = await playwright.chromium.launch()
const context = await browser.newContext()
const page = await context.newPage()
page.setDefaultTimeout(0)
const state = {
httpResponseCodes: []
}
page.on('response', async response => {
state.httpResponseCodes.push(response.status())
})
await page.goto('https://vectorizer.ai')
const fileChooserPromise = page.waitForEvent('filechooser')
await page.getByText('DRAG IMAGE HERE TO BEGIN').click()
const fileChooser = await fileChooserPromise
await fileChooser.setFiles(argv.filePath)
const $cropButton = '.PreCrop-Sidebar-crop_button'
const $rightCanvas = '#App-ImageView-RightCanvas'
const $cropButtonClassName = 'PreCrop-Sidebar-crop_button bttn bttn_dark'
const $downloadLink = '#App-DownloadLink'
const result = await Promise.race([
page.waitForSelector($cropButton),
page.waitForSelector($rightCanvas),
])
const a = await result.getProperty('className')
const b = await a.jsonValue()
if (b === $cropButtonClassName) {
await page.locator($cropButton).click()
await page.waitForSelector($rightCanvas)
await page.locator($downloadLink).click()
} else {
await page.locator($downloadLink).click()
}
const downloadPromise = page.waitForEvent('download')
await page.locator('.Options-footer button').click()
const download = await downloadPromise
await download.saveAs(path.join(argv.outputDir, argv.newFileName ?? download.suggestedFilename()))
await browser.close({ reason: 'finished' })
return state
}
const result = await start()
process.stdout.write(JSON.stringify(result))