15
14

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

puppeteerでiframe内の要素を操作する

Last updated at Posted at 2018-02-16

サンプルページ

iframe内にボタンを用意して、そのボタンを押すとボタンの色が変わるだけのページを作ります。

app/index.html
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="utf-8">
<title>サンプルページ</title>
</head>
<body>
  <iframe src="iframe.html" name="hoge">
</body>
<html>
app/iframe.html
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="utf-8">
<title>iframeページ</title>
</head>
<body>
<button type="button" id="button" style="background-color:red;" onclick="chColor()">
おしてね
</button>
<script>
  function chColor(){
    document.getElementById('button').style.background='blue';
  }
</script>

</body>
<html>
スクリーンショット 2018-02-16 16.58.38.png

サンプルコードを作成

puppeteerのコードを書いていきます。

app/script.js
const puppeteer = require('puppeteer');

(async () => {
  const browser = await puppeteer.launch({
    args: [
      '--no-sandbox',
      '--disable-setuid-sandbox'
    ]
  });

  const page = await browser.newPage();

  // urlは適宜変更してください
  await page.goto('file:///Users/somiya/app/index.html'); 
  await page.screenshot({ path: 'before.png' });

  const frame = await page.frames().find(f => f.name() === 'hoge');
  const button = await frame.$('#button');
  await button.click();
  await page.screenshot({ path: 'after.png'});

  browser.close();
})();

frameの指定をnameで指定しています。
その後そのフレーム内のボタン要素を取得し、クリックという流れです。
(他の指定方法があったら教えてください。iframe自体あまり使わないので調べてないですm(_ _)m)

実行

$ node script.js

実行したらボタンを押す前と押した後のスクリーンショットが保存されてるので確認します。

[befor]

before.png

[after]

after.png

このframeを使えばiframe内でも外でも同様の操作ができそうですね。

15
14
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
15
14

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?