質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.47%
スクレイピング

スクレイピングとは、公開されているWebサイトからページ内の情報を抽出する技術です。

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

Q&A

1回答

1963閲覧

Puppeteerでスクレイピングするときの「Error: failed to find element matching selector」というエラー

dano

総合スコア0

スクレイピング

スクレイピングとは、公開されているWebサイトからページ内の情報を抽出する技術です。

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

0グッド

0クリップ

投稿2021/09/18 18:01

###Puppeteerでスクレイピングをしたいのですが下記のようなエラーが出ます。

###発生している問題・エラー

UnhandledPromiseRejectionWarning: Error: Error: failed to find element matching selector "body > div.ts-h-l-root > div.ts-h-l-body > div.ts-h-company-upperArea > div.ts-h-company-upperArea-companyNameArea.ts-s-cf > div.ts-h-company-upperArea-companyNameArea-dataArea > table > tbody > tr:nth-child(1) > td > div.ts-h-company-dataTable-main"

###ソースコード

const puppeteer = require('puppeteer'); const readline = require('readline'); const RIKUNAVI_TARGET_URL = 'https://job.rikunabi.com/2022/'; const RIKUNAVI_COMPANY_NAME_SELECTOR = '#mp_sp_input'; const RIKUNAVI_SEARCH_SELECTOR = '#mp_mv > div > div > div.mp_sp_01 > div > form > div.mp_clearfix.mp_mb13 > a'; function getFilename() { const offset = (new Date()).getTimezoneOffset() * 60000; const iso = (new Date(Date.now() - offset)).toISOString(); const m = iso.match(/^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2})/); return `${m[1]}${m[2]}${m[3]}-${m[4]}${m[5]}${m[6]}.png`; } (async () => { const browser = await puppeteer.launch({ headless: false, }); const page = await browser.newPage(); await page.setViewport({ width: 1440, height: 900 }); await page.setExtraHTTPHeaders({ 'Accept-Language': 'ja' }); await page.goto(RIKUNAVI_TARGET_URL); const answer = await prompt('企業名検索'); await page.type(RIKUNAVI_COMPANY_NAME_SELECTOR, answer); await Promise.all([ page.waitForNavigation({ waitUntil: 'networkidle0' }), page.click(RIKUNAVI_SEARCH_SELECTOR), ]); let RIKUNAVI_COMPANY_LINK = '//*[@id="cassette-r742110032"]/div[1]/div/a'; await page.waitForXPath(RIKUNAVI_COMPANY_LINK); let elementHandleList = await page.$x(RIKUNAVI_COMPANY_LINK); await elementHandleList[0].click(); const COMPANY_NAME = await page.$eval('body > div.ts-h-l-root > div.ts-h-l-body > div.ts-h-company-upperArea > div.ts-h-company-upperArea-companyNameArea.ts-s-cf > div.ts-h-company-upperArea-companyNameArea-dataArea > table > tbody > tr:nth-child(1) > td > div.ts-h-company-dataTable-main', e => e.innerText); console.log(COMPANY_NAME); await browser.close(); })(); const prompt = async (msg) => { console.log(msg); const answer = await question('> '); return answer.trim(); }; const question = (question) => { const readlineInterface = readline.createInterface({ input: process.stdin, output: process.stdout }); return new Promise((resolve) => { readlineInterface.question(question, (answer) => { resolve(answer); readlineInterface.close(); }); }); };

###スクレイピングしたいサイト
https://job.rikunabi.com/2022/company/r742110032/

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

指定ノードが見つからないというエラーですね。

そのCSSセレクタを決めたときに見たHTMLと、プログラム実行時に取得した実際のHTMLが異なると言うことでしょうから、プログラム実行時の実際のHTMLをファイルに書き出すなどして、HTMLを見直しましょう。

投稿2021/09/19 00:13

otn

総合スコア84645

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.47%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問