以下のように株価のスクレイピングを行おうとしていますが、ウインドウの切り替えがうまくいきません。なぜでしょうか?ウインドウのデータは習得できているはずなのですが・・・。
よろしくお願いします。
以下エラーコード
oSuchWindowException Traceback (most recent call last)
<ipython-input-131-fafd9a338816> in <module>()
----> 1 sikomi1(numbers)
<ipython-input-129-96a41ed9cde1> in sikomi1(numbers)
29 while num <len(numbers): #ブラウザ更新して、初値が付いたら
30 print(wh[num])
---> 31 wd.switch_to_window(wh[num])
32 wd.refresh()
33 sine[num] = wd.find_element_by_xpath("//div[@id='detail']/div[2]/div[2]/dl/dd/strong").text
~\AppData\Roaming\Python\Python36\site-packages\selenium\webdriver\remote\webdriver.py in switch_to_window(self, window_name)
777 """
778 warnings.warn("use driver.switch_to.window instead", DeprecationWarning)
--> 779 self._switch_to.window(window_name)
780
781 def switch_to_frame(self, frame_reference):
~\AppData\Roaming\Python\Python36\site-packages\selenium\webdriver\remote\switch_to.py in window(self, window_name)
113 return
114 data = {'name': window_name}
--> 115 self._driver.execute(Command.SWITCH_TO_WINDOW, data)
116
117 def _w3c_window(self, window_name):
~\AppData\Roaming\Python\Python36\site-packages\selenium\webdriver\remote\webdriver.py in execute(self, driver_command, params)
318 response = self.command_executor.execute(driver_command, params)
319 if response:
--> 320 self.error_handler.check_response(response)
321 response['value'] = self._unwrap_value(
322 response.get('value', None))
~\AppData\Roaming\Python\Python36\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):
NoSuchWindowException: Message: no such window
(Session info: chrome=68.0.3440.106)
(Driver info: chromedriver=2.35.528161 (5b82f2d2aae0ca24b877009200ced9065a772e73),platform=Windows NT 10.0.17134 x86_64)
Message: no such window
と出てしまいます。
以下ソースコード
python
1def sikomi1(numbers): 2 wh = [] #ウインドウ番号 3 sikomi1_trigger = [] 4 sine,genzai,zenjitune = [],[],[] 5 num = 0 6 wd = web.Chrome() 7 wait = wd.implicitly_wait(10) # ブラウザ起動 8 9 while num < len(numbers): #個数分、ブラウザ起動 10 wd.get("https://finance.yahoo.co.jp/") 11 wd.find_element_by_name('query').click() 12 wd.find_element_by_name("query").clear() 13 wd.find_element_by_name("query").send_keys(numbers[num]) 14 wd.find_element_by_id("searchButton").click() 15 16 sine.append(wd.find_element_by_xpath("//div[@id='detail']/div[2]/div[2]/dl/dd/strong").text) 17 zenjitune.append(wd.find_element_by_xpath("//div[@id='detail']/div[2]/div/dl/dd/strong").text) 18 num += 1 19 wh.append(wd.current_window_handle) #ウィンドウ番号の習得 20 if num == len(numbers): 21 print(wh) 22 break 23 else: 24 wd= web.Chrome() 25 26 num = 0 27 28 while num <len(numbers): #ブラウザ更新して、初値が付いたら 29 print(wh[num]) 30 **__wd.switch_to_window(wh[num])__** ここがおかしいはずですが・・ 31 wd.refresh() 32 sine[num] = wd.find_element_by_xpath("//div[@id='detail']/div[2]/div[2]/dl/dd/strong").text 33 zenjitune[num] = wd.find_element_by_xpath("//div[@id='detail']/div[2]/div/dl/dd/strong").text 34 35 try: 36 sine[num] = int(sine[num].replace(',','')) 37 zenjitune[num] = int(zenjitune[num].replace(',','')) 38 josyo[num] = sine[num]/zenjitune[num]*100-100 39 print(josyo[num]) 40 num += 1 41 wd.switch_to_window(wh[num]) 42 43 except: 44 nun += 1 45 wd.switch_to_window(wh[num]) 46
実行結果
['CDwindow-8A8D9A9BE0F1B07B14027E7A1468EA5C', 'CDwindow-9D725EAE0F62DBD1390ACC33DB00C3D2']
CDwindow-8A8D9A9BE0F1B07B14027E7A1468EA5C

回答1件
あなたの回答
tips
プレビュー
下記のような回答は推奨されていません。
このような回答には修正を依頼しましょう。
また依頼した内容が修正された場合は、修正依頼を取り消すようにしましょう。
2018/08/17 06:57
2018/08/17 12:22
2018/08/17 12:28