2017-08-20 5 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'かどうかを判断しましたか? –