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

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

新規登録して質問してみよう
ただいま回答率
85.31%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

selenium

Selenium(セレニウム)は、ブラウザをプログラムで作動させるフレームワークです。この原理を使うことにより、ブラウザのユーザーテストなどを自動化にすることができます。

Q&A

解決済

1回答

1851閲覧

Seleniumでページ内iframeでの下スクロールができない

avantgarden

総合スコア121

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

selenium

Selenium(セレニウム)は、ブラウザをプログラムで作動させるフレームワークです。この原理を使うことにより、ブラウザのユーザーテストなどを自動化にすることができます。

0グッド

0クリップ

投稿2023/06/21 06:48

編集2023/06/21 07:57

実現したいこと

ページの中のiframe内で下スクロールさせたい

前提

見た目的にはページの<main>タグ内に横長のiframeが1つだけドカンとある感じです。

そのiframeには、li要素で横長長方形のブロックが横4列で並んでします。

初期表示では8行分のli要素が表示されていて、マウスで手動スクロールすると、iframe内の高さ半分程に達した段階で数行分のli要素が表示され、スクロールを続けることで20行のli要素が表示されます。

このようなiframe要素において、自動で一番下までスクロールさせたいです。

発生している問題・エラーメッセージ

下記「該当のソースコード」に記載のコードを実行しましたが、スクロールされません。エラーも出ずただ何も起きない、という状況です。

iframe外のDOMに対して同様のコードを書くと正常にスクロールされるのですが、上記のiframeで実行するとスクロールされません。原因をご教示いただきたいです。

該当のソースコード

# ifameに切り替え driver.switch_to.frame(iframe_element) # iframeの高さを取得 scroll_height = driver.execute_script("return document.body.scrollHeight") # スクロールを実行 driver.execute_script("window.scrollTo(0, "+str(scroll_height)+");")

補足情報(FW/ツールのバージョンなど)

pythonのバージョンは3.11.3です。
seleniumのバージョンは4.1.0です。

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

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

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

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

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

guest

回答1

0

ベストアンサー

iframeの中をメソッドで操作・検索するわけじゃないので、switch_to.frameは不要で、
JavaScriptでiframeの中を扱うというコードが必要でしょう。
Seleniumのメソッドの対象とJavaScriptの対象は関係ないです。
こんな感じでしょうか。

JavaScript

1scroll_height = driver.execute_script("return document.querySelector('iframe').scrollHeight") 2driver.execute_script("document.querySelector('iframe').contentWindow.scrollTo(0, "+str(scroll_height)+");")

(セレクターは適当)

投稿2023/06/21 07:58

otn

総合スコア86281

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

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

avantgarden

2023/06/21 08:31

有難うございます。 回答いただいたスクリプトで試してみたのですが、 Blocked a frame with origin "https://[ドメイン]" from accessing a cross-origin frame. というエラーが出ました。 ドメインは同一ドメインなので変だと思い、直接ブラウザのコンソルからJSを実行したのですがやはり同じエラーが出ます。 スクレイピングと関係のない質問になるのですが、同一オリジンでもブロックされるということは、サイト側がそのような対策をしているということなのでしょうか?
avantgarden

2023/06/21 08:33

すみません。訂正です。 > ドメインは同一ドメインなので変だと思い と書きましたが、iframeの参照先は違うドメインでした。
otn

2023/06/21 09:35

JavaScriptによるクロスドメインのiframe内操作は知見がありません。 軽くググった限りでは断念例ばかりですね。
avantgarden

2023/06/21 10:42

有難うございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.31%

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

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

質問する

関連した質問