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

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

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

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

Python 3.x

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

Python

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

selenium

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

解決済

python seleniumでタイムアウトになった時、リトライしたい。

pethagoras
pethagoras

総合スコア13

スクレイピング

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

Python 3.x

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

Python

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

selenium

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

1回答

0評価

2クリップ

19197閲覧

投稿2018/08/17 02:57

編集2018/08/18 04:36

前提・実現したいこと

python3
seleniumでスクレイピング中、度々タイムアウトエラーに陥るので
タイムアウトの時にリトライさせたいのですが、
どんなコードを書けばいいのかわかりません。

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

Traceback (most recent call last):
File "C:/pycharm/kabusyutoku.py", line 21, in <module>
btn.click()
File "C:\ProgramData\Anaconda3\lib\site-packages\selenium\webdriver\remote\webelement.py", line 80, in click
self._execute(Command.CLICK_ELEMENT)
File "C:\ProgramData\Anaconda3\lib\site-packages\selenium\webdriver\remote\webelement.py", line 628, in _execute
return self._parent.execute(command, params)
File "C:\ProgramData\Anaconda3\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 320, in execute
self.error_handler.check_response(response)
File "C:\ProgramData\Anaconda3\lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 242, in check_response
raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.TimeoutException: Message: timeout
(Session info: chrome=68.0.3440.106)
(Driver info: chromedriver=2.40.565498 (ea082db3280dd6843ebfb08a625e3eb905c4f5ab),platform=Windows NT 6.1.7601 SP1 x86_64)

該当のソースコード

python3

from selenium import webdriver from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions from selenium.webdriver.common.by import By import time driver = webdriver.Chrome("E:/Users/chromedriver_win32/chromedriver.exe") driver.get("https://kabuoji3.com/stock/") 入力画面のURL取得 cur_url = driver.current_url for i in range(1598,9999): form = driver.find_element_by_class_name("form_txt") form.send_keys(i) 検索ボタンクリック time.sleep(0.5) btn = driver.find_element_by_css_selector("#base_box > div > form > button.btn_form.btn_submit") btn.click() 企業名を探す True→銘柄クリック False→次の企業へ meigara = driver.find_elements_by_css_selector("#base_box > div > div.data_contents > div > div > div > table > tbody > tr > td:nth-child(1) > a") if meigara: meigara[0].click() cur_url2 = driver.current_url 2018年クリック wait = WebDriverWait(driver, 60) wait.until(expected_conditions.element_to_be_clickable((By.CSS_SELECTOR, "#base_box > div > ul > li:nth-child(2) > a"))) data = driver.find_element_by_css_selector("#base_box > div > ul > li:nth-child(2) > a") time.sleep(0.5) data.click() ダンロードリンククリック wait = WebDriverWait(driver, 60) wait.until(expected_conditions.element_to_be_clickable((By.CSS_SELECTOR, "#base_box > div > div:nth-child(3) > form > button"))) download = driver.find_element_by_css_selector("#base_box > div > div:nth-child(3) > form > button") time.sleep(0.5) download.click() ダウンロード wait = WebDriverWait(driver, 60) wait.until(expected_conditions.element_to_be_clickable((By.CSS_SELECTOR, "#base_box > div > div.mt_10.tc > form > button"))) downloader = driver.find_element_by_css_selector("#base_box > div > div.mt_10.tc > form > button") time.sleep(0.5) downloader.click() time.sleep(1) 画面を戻して2017年をクリック 2017が無い時はスルー driver.implicitly_wait(60) driver.get(cur_url2) data = driver.find_elements_by_css_selector("#base_box > div > ul > li:nth-child(3) > a") if data: data[0].click() ダンロードリンククリック wait = WebDriverWait(driver, 60) wait.until(expected_conditions.element_to_be_clickable((By.CSS_SELECTOR, "#base_box > div > div:nth-child(3) > form > button"))) download = driver.find_element_by_css_selector("#base_box > div > div:nth-child(3) > form > button") time.sleep(0.5) download.click() #ダウンロード wait = WebDriverWait(driver, 60) wait.until(expected_conditions.element_to_be_clickable((By.CSS_SELECTOR, "#base_box > div > div.mt_10.tc > form > button"))) downloader = driver.find_element_by_css_selector("#base_box > div > div.mt_10.tc > form > button") time.sleep(0.5) downloader.click() print(i,"完了") #銘柄入力画面に戻る driver.implicitly_wait(1) driver.get(cur_url) else: print(i,"は2017年は無し") driver.implicitly_wait(1) driver.get(cur_url) else: wait = WebDriverWait(driver, 10) wait.until(expected_conditions.element_to_be_clickable((By.CLASS_NAME, "form_txt"))) form2 = driver.find_element_by_class_name("form_txt") form2.clear() print(i , "は無し")

試したこと

クリックさせる前に下記の関数で待ち時間を作ってみましたが、タイムアウトエラーは解決しませんでした。
time.sleep

implicitly_wait

wait = WebDriverWait(driver, 10)
wait.until(expected_conditions.element_to_be_clickable((By.CLASS_NAME, "form_txt")))

ご解答お待ちしています。
上記の解決方法、ご教授いただけますようお願いいたします。

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

まだ回答がついていません

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

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

同じタグがついた質問を見る

スクレイピング

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

Python 3.x

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

Python

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

selenium

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