teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

追記

2020/05/19 12:59

投稿

shirai
shirai

スコア1290

answer CHANGED
@@ -8,4 +8,65 @@
8
8
 
9
9
  driver.switch_to.window(driver.window_handles[-1])#新しいウィンドウを有効にする
10
10
  time.sleep(2)
11
- ```
11
+ ```
12
+
13
+ # コメントを受けて追記
14
+
15
+ なるほど。
16
+ 日によって成功確率が異なるということは、
17
+ サーバ(スクレイピング先)かクライアント(自PC)のどちらかが
18
+ 極端にスペックが低い可能性が高いです。
19
+
20
+ 自PCを見て異常がなさそうなら、
21
+ 待ち方を変えてみましょう。
22
+ あとスクロールが悪さをしている可能性もあるので
23
+ これもつけたり外したりしてみてください。
24
+
25
+ ```python
26
+ from selenium.common.exceptions import TimeoutException
27
+ from selenium.webdriver.common.by import By
28
+ from selenium.webdriver.support import expected_conditions as EC
29
+ from selenium.webdriver.support.ui import WebDriverWait
30
+
31
+ try:
32
+ WebDriverWait(driver, 20).until(EC.presence_of_element_located((By.ID, 'iFrameのid要素')))
33
+ except TimeoutException:
34
+ print('20秒以内にページが読み込めませんでした。')
35
+ driver.quit()
36
+ exit()
37
+ driver.switch_to.frame(driver.find_element_by_id('iFrameのid要素'))
38
+
39
+ try:
40
+ WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.NAME, 'button')))
41
+ except TimeoutException:
42
+ print('20秒以内にボタンがクリックできませんでした。')
43
+ driver.quit()
44
+ exit()
45
+ driver.find_element_by_name("button").click()
46
+
47
+ driver.switch_to.window(driver.window_handles[-1])
48
+ print('最後までいけました。')
49
+ driver.quit()
50
+ exit()
51
+ ```
52
+
53
+ ---
54
+
55
+ これで「20秒以内にページが読み込めませんでした。」が頻発するようでしたら、
56
+
57
+ ```python
58
+ try:
59
+ WebDriverWait(driver, 20).until(EC.presence_of_element_located((By.ID, 'iFrameのid要素')))
60
+ except TimeoutException:
61
+ print('20秒以内にページが読み込めませんでした。')
62
+ driver.quit()
63
+ exit()
64
+ ```
65
+
66
+
67
+
68
+ ```python
69
+ driver.implicitly_wait(20)
70
+ ```
71
+
72
+ に置き換えてみてください。