【发布时间】:2021-05-06 09:03:32
【问题描述】:
尝试编写使用 puppeteer 登录网站的脚本,并在设备通过每个 url 时模拟设备列表。但是,当我尝试运行脚本时出现错误:SyntaxError: await is only valid in async function。我对异步函数不是很熟悉,所以我试图让每个函数都异步,我找不到我的同步函数。如果是当我映射每个 url 时,我如何使这个同步?
//import devices from './puppeteerDevices'
const puppeteer = require('puppeteer');
const { devices } = puppeteer;
testedMobileDevices = ["Galaxy Note 3","Galaxy Note 3 landscape","Galaxy Note II","Galaxy Note II landscape","Galaxy S III","Galaxy S III landscape","Galaxy S5","Galaxy S5 landscape","iPad","iPad landscape","iPad Mini","iPad Mini landscape","iPad Pro","iPad Pro landscape","iPhone 4","iPhone 4 landscape","iPhone 5","iPhone 5 landscape","iPhone 6","iPhone 6 landscape","iPhone 6 Plus","iPhone 6 Plus landscape","iPhone 7","iPhone 7 landscape","iPhone 7 Plus","iPhone 7 Plus landscape","iPhone 8","iPhone 8 landscape","iPhone 8 Plus","iPhone 8 Plus landscape","iPhone SE","iPhone SE landscape","iPhone X","iPhone X landscape","iPhone XR","iPhone XR landscape","iPhone 11","iPhone 11 landscape","iPhone 11 Pro","iPhone 11 Pro landscape","iPhone 11 Pro Max","iPhone 11 Pro Max landscape","Nexus 10","Nexus 10 landscape","Nexus 4","Nexus 4 landscape","Nexus 5","Nexus 5 landscape","Nexus 5X","Nexus 5X landscape","Nexus 6","Nexus 6 landscape","Nexus 6P","Nexus 6P landscape","Nexus 7","Nexus 7 landscape","Pixel 2","Pixel 2 landscape","Pixel 2 XL","Pixel 2 XL landscape"];
const login = async () => {
const browser = await puppeteer.launch( {headless: true });
const page = await browser.newPage();
const username = 'andrewbregman'
const password = 'randompassword120948acndkla'
const base_url = 'http://127.0.0.1:8000/'
await page.goto({base_url}/login);
await page.type ('[name=username]', username);
await page.type('[name=password]', password);
await page.click('[type=submit]');
await page.waitFor(5000);
}
const test = async () => {
testedMobileDevices.map(device => {
login();
const base_url = 'http://127.0.0.1:8000/'
const urls = ['myprojects', 'home', 'notifications']
const browser = await puppeteer.launch()
const page = await browser.newPage()
await page.emulate(device)
urls.forEach(goUrls);
const goUrls = async (url) =>{
await page.goto({base_url}/url)
page.screenshot({
path: "./screenshot.jpg",
type: "jpeg",
fullPage: true})
await page.waitFor(100);
}
})
}
test();
【问题讨论】:
-
错误信息应该有一个行号。
-
.map(device => {至少是一个,但通常你不能只是在前面拍async就可以了。 -
page.goto({base_url}/url)无效。你的意思可能是page.goto(`${base_url}/${url}`)
标签: javascript node.js dictionary asynchronous puppeteer