前提・実現したいこと
Pythonでwebスクレイピングの勉強中です。
WEB版のFileMakerでテキストボックスに自動で入力したいのですが、
1)要素を取得したあと、ボックス内をclearしようとするとエラーがでます。
試しに、ボックスをあらかじめマウスで選択状態にした場合、sendkeysまで問題なく入力できます。
2)そのため無理くりpyautoguiでtabキー入力し、該当のボックスまで辿りつかせた状態でやってみると
clearまではできてsendkeysで入力できず、さらにエラーになりません。
問題は何でしょうか。ここ3週間ほど悩んでます。
tabキー入力などせず、スマートに1)で入力できるようにしたいです。
宜しくお願いします。
発生している問題・エラーメッセージ
1)のエラー
--------------------------------------------------------------------------- InvalidElementStateException Traceback (most recent call last) <ipython-input-24-cfd3d072337e> in <module> 14 elebikou = browser.find_element_by_xpath('//*[@id="b0p1o123i0i0r1"]/div/div[1]') 15 ---> 16 elebikou.clear() 17 elebikou.send_keys('111') 18 ~\Anaconda3\lib\site-packages\selenium\webdriver\remote\webelement.py in clear(self) 93 def clear(self): 94 """Clears the text if it's a text entry element.""" ---> 95 self._execute(Command.CLEAR_ELEMENT) 96 97 def get_property(self, name): ~\Anaconda3\lib\site-packages\selenium\webdriver\remote\webelement.py in _execute(self, command, params) 631 params = {} 632 params['id'] = self._id --> 633 return self._parent.execute(command, params) 634 635 def find_element(self, by=By.ID, value=None): ~\Anaconda3\lib\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)) ~\Anaconda3\lib\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): InvalidElementStateException: Message: invalid element state (Session info: chrome=90.0.4430.93)
該当のソースコード
1)
elebikou = browser.find_element_by_xpath('//*[@id="b0p1o123i0i0r1"]/div/div[1]')
elebikou.clear()
elebikou.send_keys('111')
試したこと
1)でボックスをあらかじめマウスで選択状態にした場合は問題なくいけるので
以下の2)で試しましたが、clearまでできsendkeysで入力されず、さらにエラーになりません。
2)
pyautogui.click(x=432, y=864)
time.sleep(1)
pyautogui.press('tab')
time.sleep(1)
pyautogui.press('tab')
time.sleep(1)
pyautogui.press('tab')
time.sleep(1)
pyautogui.press('tab')
time.sleep(1)
pyautogui.press('tab')
time.sleep(1)
elebikou = browser.find_element_by_xpath('//*[@id="b0p1o123i0i0r1"]/div/div[1]')
elebikou.clear()
elebikou.send_keys('111')
補足情報(FW/ツールのバージョンなど)
取得したい場所
<div class="fm-textarea v-widget v-has-width v-has-height fm-inactive iwps_edit_box fm-textarea-iwps_edit_box fm_object_123 fm-textarea-fm_object_123" id="b0p1o123i0i0r1" style="top: 367px; left: 119px; width: 316px; height: 43px;"><div class="inner_border"><div class="text" tabindex="0">uu<br></div><div class="placeholder"></div></div></div>取得したい場所のfull XPath
/html/body/div[1]/div/div[2]/div[2]/div/div[2]/div/div/div[2]/div/div/div[2]/div/div[8]
あなたの回答
tips
プレビュー