2017-08-20 110 views
3

使用puppeteer,您如何以编程方式提交表单?到目前为止,我已经能够使用page.click('.input[type="submit"]')这样做,如果表单实际上包含提交输入。但对于不包含提交输入表单,注重形式的文本输入元素,并使用page.press('Enter')似乎并没有真正引起表单提交:木偶:如何提交表单?

const puppeteer = require('puppeteer'); 

(async() => { 

    const browser = await puppeteer.launch(); 
    const page = await browser.newPage(); 
    await page.goto('https://stackoverflow.com/', {waitUntil: 'load'}); 
    console.log(page.url()); 

    // Type our query into the search bar 
    await page.focus('.js-search-field'); 
    await page.type('puppeteer'); 

    // Submit form 
    await page.press('Enter'); 

    // Wait for search results page to load 
    await page.waitForNavigation({waitUntil: 'load'}); 


    console.log('FOUND!', page.url()); 

    // Extract the results from the page 
    const links = await page.evaluate(() => { 
     const anchors = Array.from(document.querySelectorAll('.result-link a')); 
     return anchors.map(anchor => anchor.textContent); 
    }); 
    console.log(links.join('\n')); 
    browser.close(); 

})(); 

回答

9

试试这个

const form = await page.$('form-selector'); 
await form.evaluate(form => form.submit()); 

对于v0.11.0和laters:

await page.$eval('form-selector', form => form.submit()); 
+1

谢谢!看起来问题不在表单元素上使用'.evaluate()' - 不知道你可以这样做。 –

+1

@NamMaiAnh我越来越TypeError:form.evaluate不是一个函数 – redochka

+1

@redochka你可以告诉我的代码?你确定'form'是否为'null'? –