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

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

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

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

selenium

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

Q&A

2回答

3420閲覧

Python selenium スクリーンキャプチャ

kimpy

総合スコア7

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

selenium

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

0グッド

0クリップ

投稿2020/06/09 10:59

あるサイトのLP(縦に長いページ)をseleniumのスクリーンショットで1枚の画像として取得しようとしているのですがうまく行かないケースがあります。

ほとんどのページはうまく行くのですがどうも長すぎるとタイムアウトエラーになっているようです。
そのエラーの逃げ方がわかりません。

エラーになっているサイトは以下です。(違うpcでやると1度取得できたのですが。。。)
https://emerire.com/lp/tr_gs/

ご回答お願いいたします。

コードは以下になります

import time from selenium import webdriver from selenium.webdriver.chrome.options import Options #ヘッドレスでdriver立ち上げ options = Options() options.add_argument('--headless') driver = webdriver.Chrome(options=options) driver.set_page_load_timeout(60) driver.get('URL') #Webページの縦横サイズを取得し、ウィンドウを合わせる(そうしないと画面全体がスクショできない) page_width = driver.execute_script('return document.body.scrollWidth') page_Height = driver.execute_script('return document.body.scrollHeight') driver.set_window_size(page_width,page_Height) #スクリーンショット実行 driver.save_screenshot("/Users/ユーザー/Desktop/test/screenshot.png") #ここでタイムアウトエラー発生 driver.quit()

エラー文

--------------------------------------------------------------------------- TimeoutException Traceback (most recent call last) <ipython-input-85-6a7157172f9f> in <module> ----> 1 driver.save_screenshot("/Users/ユーザー/Desktop/test/screenshot.png") /usr/local/Cellar/python3/3.6.2/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/selenium/webdriver/remote/webdriver.py in save_screenshot(self, filename) 1053 driver.save_screenshot('/Screenshots/foo.png') 1054 """ -> 1055 return self.get_screenshot_as_file(filename) 1056 1057 def get_screenshot_as_png(self): /usr/local/Cellar/python3/3.6.2/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/selenium/webdriver/remote/webdriver.py in get_screenshot_as_file(self, filename) 1030 warnings.warn("name used for saved screenshot does not match file " 1031 "type. It should end with a `.png` extension", UserWarning) -> 1032 png = self.get_screenshot_as_png() 1033 try: 1034 with open(filename, 'wb') as f: /usr/local/Cellar/python3/3.6.2/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/selenium/webdriver/remote/webdriver.py in get_screenshot_as_png(self) 1062 driver.get_screenshot_as_png() 1063 """ -> 1064 return base64.b64decode(self.get_screenshot_as_base64().encode('ascii')) 1065 1066 def get_screenshot_as_base64(self): /usr/local/Cellar/python3/3.6.2/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/selenium/webdriver/remote/webdriver.py in get_screenshot_as_base64(self) 1072 driver.get_screenshot_as_base64() 1073 """ -> 1074 return self.execute(Command.SCREENSHOT)['value'] 1075 1076 def set_window_size(self, width, height, windowHandle='current'): /usr/local/Cellar/python3/3.6.2/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/selenium/webdriver/remote/webdriver.py in execute(self, driver_command, params) 319 response = self.command_executor.execute(driver_command, params) 320 if response: --> 321 self.error_handler.check_response(response) 322 response['value'] = self._unwrap_value( 323 response.get('value', None)) /usr/local/Cellar/python3/3.6.2/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/selenium/webdriver/remote/errorhandler.py in check_response(self, response) 240 alert_text = value['alert'].get('text') 241 raise exception_class(message, screen, stacktrace, alert_text) --> 242 raise exception_class(message, screen, stacktrace) 243 244 def _value_or_default(self, obj, key, default): TimeoutException: Message: timeout: Timed out receiving message from renderer: 10.000 (Session info: headless chrome=83.0.4103.97)

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

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

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

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

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

guest

回答2

0

Python

1import time 2from selenium import webdriver 3from selenium.webdriver.chrome.options import Options 4 5#ヘッドレスでdriver立ち上げ 6options = Options() 7options.add_argument('--headless') 8driver = webdriver.Chrome(options=options) 9driver.set_page_load_timeout(10) 10 11try: 12 driver.get('https://emerire.com/lp/tr_gs/') 13except: 14 pass 15finally: 16 #Webページの縦横サイズを取得し、ウィンドウを合わせる(そうしないと画面全体がスクショできない) 17 page_width = driver.execute_script('return document.body.scrollWidth') 18 page_Height = driver.execute_script('return document.body.scrollHeight') 19 20 driver.set_window_size(page_width,page_Height) 21 22 #スクリーンショット実行 23 driver.save_screenshot("/Users/ユーザー/Desktop/test/screenshot.png") 24 #ここでタイムアウトエラー発生 25 driver.quit()

投稿2020/09/27 20:59

Reach

総合スコア735

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

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

0

ページを開いた後に裏で何か(ajax?)が回っていてseleniumが待たされているのでしょう。
また、全部が表示されるまで確実に待ってもダメだったらPCのスペック不足かもしれません。(他のPCではできているようなので。)

python

1from time import sleep 2from selenium import webdriver 3from selenium.webdriver.chrome.options import Options 4 5#ヘッドレスでdriver立ち上げ 6options = Options() 7options.add_argument('--headless') 8options.add_argument('--disable-gpu') 9options.add_argument('--no-sandbox') 10driver = webdriver.Chrome(options=options) 11 12driver.get('URL') 13 14# 全表示まで待つ 15current_source = '' 16while current_source != driver.page_source: 17 current_source = driver.page_source 18 driver.execute_script('scrollTo(100, document.body.scrollHeight)') 19 sleep(10) 20 21#Webページの縦横サイズを取得し、ウィンドウを合わせる(そうしないと画面全体がスクショできない) 22page_width = driver.execute_script('return document.body.scrollWidth') 23page_Height = driver.execute_script('return document.body.scrollHeight') 24driver.set_window_size(page_width,page_Height) 25 26#スクリーンショット実行 27driver.save_screenshot("/Users/ユーザー/Desktop/test/screenshot.png") 28 29sleep(30) # この行不要かも 30 31driver.quit() 32

投稿2020/06/11 15:55

shirai

総合スコア1290

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

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

kimpy

2020/06/11 23:57

回答ありがとうございます! 一応待ったりもしてみたのですが うまくできません。 PCスペックなのでしょうか。 試しにdriverをchoromeからsafariに変えて実行してみたところうまくいきました。 selenium ver. とchorome ver.の相性とかもあるのかもしれないです。。を
shirai

2020/06/12 00:28

verは合わせないとうまく動きません。これは必須です。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問