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

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

新規登録して質問してみよう
ただいま回答率
85.35%
Node.js

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

Q&A

解決済

1回答

2105閲覧

puppeteer でリンクをクリックしてもイベントが発生しない

m.a.d.a.o

総合スコア0

Node.js

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

0グッド

0クリップ

投稿2021/07/30 05:08

とあるサイトを puppeteer を使いスクレイピングして PDF をダウンロードしようとしています。

ログインから、いくつか画面を介し、ダウンロード画面まで行き、
対象のダウンロードのリンクをクリックする処理で、イベントが発生せず、行き詰まってます。
(リンク先の URL は可変のため、クリック後の Request の情報を取得して、ごにょごにょしたい)

クリックは出来ている前提で、イベントが発生しない、何か考えられる原因はありますでしょうか?
または、
クリックが出来ていない前提で、SELECTOR で対象の要素が指定出来てるが、クリック出来ない原因はありますか?

よろしくお願い致します。

とあるサイト

サイトは下記のような、a タグでダウンロードが実装されており、
実際ブラウザ上でクリックすると、別タブが開き PDF がダウンロードされる動きです。

<a class="gTL" href="javascript:"> <span class="gTL__txt">PDF</span> </a>

スクレイピングのソースコード

(async () => { const browser = await puppeteer.launch({ slowMo: 50, args: ["--no-sandbox","--disable-setuid-sandbox"] }); const page = await browser.newPage(); await page.setDefaultNavigationTimeout(10000); await page.setRequestInterception(true); await page.setViewport({width:1920,height:1080}); //イベントが発生すれば、"request start"が出力される page.on('request', async(request) => {console.log('request start');return request.continue();}); try {   //--------------------------------   // ダウンロード画面までのソースは省略   //-------------------------------- //ページ数 この時点で 2 console.log((await browser.pages()).length); //対象のリンク const [target] = await page.$x('//a[@class="gTL"]'); //elementhandle の確認 → 対象の要素がちゃんと取れてる //console.dir(target); //----------------------------- // ※ここでリンクをクリック処理※ //----------------------------- await page.waitForTimeout(2000); //ページ数 変わらず 2 console.log((await browser.pages()).length); } catch(e) { console.log(e); } finally { await browser.close(); } })();

試したこと

1.普通にクリック

await target.click();

2.フォーカス当ててからEnter

await target.focus(); await page.keyboard.press('Enter');

3.マウスでクリック

const box = await target.boundingBox(); const x = box.x + (box.width/2); const y = box.y + (box.height/2); await page.mouse.move(x,y); await page.mouse.click(x,y,{ button: 'left' })

別の似たようなサイトでは、上記いずれもクリックできイベントが発生しているのですが、
この、とあるサイトでは、うまく動きませんでした。

補足情報

puppeteer v10.0.0

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

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

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

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

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

guest

回答1

0

自己解決

イベント自体は発生していが、リクエスト情報が取れない状態でしたので、質問内容が違ってきますので、クローズします

投稿2021/09/28 09:02

m.a.d.a.o

総合スコア0

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問