VBAでChromeをSeleniumで自動操作するプログラムを書いております。
下にあるループ処理を2,000回程度繰り返したいのですが、
500回目あたりからだんだんと1ループにかかる時間が長くなり、最後には止まってしまいます。
調べてみたのですが、IE操作での解決策ばかりで解決には至りませんでした。
https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q14224808844
Set driver = Nothing というのが有効そうとわかったのですが、こちらも使い方がわかりませんでした。
わかる方、ご教授いただけますとありがたいです。
VBA
1'ループ処理 2 3 Dim i As Integer 4 Dim tim As Integer 5 6 i = 2 7 tim = i 8 9 10 Do While tim = i 11 12 time = 1500 13 Sleep time 14 15 '新規作成 16 17 driver.FindElementByCss("body > div.container > div > button").Click 18 19 'キーワード 20 21 driver.FindElementByCss("#inputKws").SendKeys Cells(i, 2) 22 23 24 '除外ワード 25 26 driver.FindElementByCss("#inputKwes").SendKeys Cells(i, 3) 27 28 29 '送料無料のみ 30 31 If Not Cells(i, 4) = "" Then 32 33 driver.FindElementByCss("body > div.container > div > form > div:nth-child(5) > div > label > input").Click 34 35 End If 36 37 38 39 '=============================== 40 41 42 '商品状態 43 44 45 '新品、未使用 46 47 If Cells(i, 5) = "" Then 48 49 driver.FindElementByCss("body > div.container > div > form > div:nth-child(6) > div:nth-child(2) > label > input").Click 50 51 End If 52 53 54 '未使用に近い 55 56 If Cells(i, 6) = "" Then 57 58 driver.FindElementByCss("body > div.container > div > form > div:nth-child(6) > div:nth-child(3) > label > input").Click 59 60 End If 61 62 63 '目立った傷や汚れなし 64 65 If Cells(i, 7) = "" Then 66 67 driver.FindElementByCss("body > div.container > div > form > div:nth-child(6) > div:nth-child(4) > label > input").Click 68 69 End If 70 71 72 'やや傷や汚れあり 73 74 If Cells(i, 8) = "" Then 75 76 driver.FindElementByCss("body > div.container > div > form > div:nth-child(6) > div:nth-child(5) > label > input").Click 77 78 End If 79 80 81 '傷や汚れあり 82 83 If Cells(i, 9) = "" Then 84 85 driver.FindElementByCss("body > div.container > div > form > div:nth-child(6) > div:nth-child(6) > label > input").Click 86 87 End If 88 89 90 '全体的に状態が悪い 91 92 If Cells(i, 10) = "" Then 93 94 driver.FindElementByCss("body > div.container > div > form > div:nth-child(6) > div:nth-child(7) > label > input").Click 95 96 End If 97 98 99 100 '=============================== 101 102 103 'フリマ 104 105 106 'メルカリ 107 108 If Cells(i, 11) = "" Then 109 110 driver.FindElementByCss("body > div.container > div > form > div:nth-child(7) > div:nth-child(2) > label > input").Click 111 112 End If 113 114 115 'ラクマ 116 117 If Cells(i, 12) = "" Then 118 119 driver.FindElementByCss("body > div.container > div > form > div:nth-child(7) > div:nth-child(3) > label > input").Click 120 121 End If 122 123 124 'オタマート 125 126 If Cells(i, 13) = "" Then 127 128 driver.FindElementByCss("body > div.container > div > form > div:nth-child(7) > div:nth-child(4) > label > input").Click 129 130 End If 131 132 133 'ヤフオク 134 135 If Cells(i, 14) = "" Then 136 137 driver.FindElementByCss("body > div.container > div > form > div:nth-child(7) > div:nth-child(5) > label > input").Click 138 139 End If 140 141 142 'PayPayフリマ 143 144 If Cells(i, 15) = "" Then 145 146 driver.FindElementByCss("body > div.container > div > form > div:nth-child(7) > div:nth-child(6) > label > input").Click 147 148 End If 149 150 151 '=============================== 152 153 154 155 156 '下限価格 157 158 driver.FindElementByCss("#inputPmin").SendKeys Cells(i, 16) 159 160 161 '上限価格 162 163 driver.FindElementByCss("#inputPmax").SendKeys Cells(i, 17) 164 165 'アラート名 166 167 If Not Cells(i, 18) = "" Then 168 169 driver.FindElementByCss("body > div.container > div > form > div:nth-child(10) > div > label > input").Click 170 driver.FindElementByCss("#inputName").SendKeys Cells(i, 18) 171 172 End If 173 174 175 'アラートのプレビュー 176 177 driver.FindElementByCss("body > div.container > div > form > button").Click 178 179 '登録確定 180 181 time = 1500 182 Sleep time 183 184 driver.FindElementByCss("body > div.container > div > div:nth-child(3) > button").Click 185 186 187 188 '判定 189 190 i = i + 1 191 192 If Cells(i, 2) = "" And Cells(i, 23) = "" And Cells(i, 24) = "" Then 193 194 tim = i - 1 195 196 Else 197 198 tim = i 199 200 End If 201 202 203 time = 3000 204 Sleep time 205 206 207 208 209 Loop
> だんだんと1ループにかかる時間が長くなり、最後には止まってしまいます。
「止まる」とはどういうことでしょうか?Windowsがクラッシュするという意味ですか?他の意味ですか?
そしてこのVBAコードはどのアプリケーションに書いているのでしょうか?
当該プログラムを実行中、タスクマネージャーを見ていますか。
タスクマネージャーでCPU、メモリなどの動きを見てください。
メモリーがいっぱいになるとスワップが発生して遅くなります。そうであれば1回に2000回のループでなく、100回のループするアプリケーションを20回実行しては。ケースバイケースですので一概には言えませんが。
ikapy様
回答が遅くなり申し訳ございません。
確かに、遅くなっているときはCPUが100%近くになっています。
”1回に2000回のループでなく、100回のループするアプリケーションを20回実行しては。”
>>お手数ですが、このやり方を簡単にでいいのでご教授願えないでしょうか?
方法がどうしてもわかりませんでした…
mag様
回答が遅くなり申し訳ございません。
段々と処理が遅くなり、最後はWebページの読み込みが追いつかずNoSuchElementErrorが出て止まってしまう、という意味でした。
言葉足らずですみません。
> 確かに、遅くなっているときはCPUが100%近くになっています。
それは普通ではないでしょうか?(VBAを実行中においては)
> 最後はWebページの読み込みが追いつかずNoSuchElementErrorが出て止まってしまう、という意味でした。
そのことを質問に書きましょう。
エラーについては読み込みが完了してから次の操作をするようにしましょう。
>> そしてこのVBAコードはどのアプリケーションに書いているのでしょうか?
私の2つ目の質問にもお答えいただけないでしょうか?
>> そしてこのVBAコードはどのアプリケーションに書いているのでしょうか?
私の2つ目の質問にもお答えいただけないでしょうか?
すみません、
Excel→Visual Basic→標準モジュール
に書いております!
> Excel→Visual Basic→標準モジュールに書いております!
了解しました。
スクレイピング先のサイトがスクレイピング禁止でなければ実際のコード(実行可能なコード)を掲載いただくと実際の挙動を検証できるかもしれません。
回答1件
あなたの回答
tips
プレビュー