実現したいこと
初心者質問で申し訳ありませんがよろしくお願いします。
こちらのHP
より、seleniumを使って商品名とリンクを抽出したいです。
1、ブランド名入力
2、素材名入力
3、商品データがあれば抽出
4、抽出終了、または商品データがなければ素材名をクリアして次の素材名入力
5、素材名を1周したら次のブランド名で同様の処理
6、dfをつくる
3までできていますが、4の処理でうまくいきません。
発生している問題・分からないこと
ループ処理でうまくいきません。else:内が、browser.back()だと動くのですが、2周目の処理でエラーになります。本当はブラウザバックではなく、最上部にスクロールでも同様の入力ボックスがあるので大丈夫?なので、そちらも試してみましたがうまくいきませんでした。
スクロール後画面にある、入力ボックスをクリアし、次の素材名を入力できるようにしたいです。
そもそもループ処理について学習中ですので、whileの使い方に不安があります・・。
(追記)
ブランド名入力→素材名入力→Nextpageがないので戻って素材名クリア→次の素材名入力→データ抽出・完了→Nextpageがでなくなるまで読み込んだので戻って次の素材名入力、としたいのですがここで以下のエラーが出ます。
該当のソースコード
python
1from selenium import webdriver 2from selenium.webdriver.common.by import By 3import time 4import tqdm 5import pandas as pd 6from selenium.webdriver.chrome.options import Options 7from selenium.webdriver.common.keys import Keys 8 9df = pd.read_excel("2.xlsx") 10INCI = df["INCI"].to_list() 11df_brand = pd.read_excel('2.xlsx', sheet_name='Brands') 12Brand = df_brand["Brand List"].to_list() 13 14MIN_INTERVAL = 0.5 15INTERVAL = 2.5 16MINUTE_INTERVAL = 60 17 18#options = Options() 19#options.add_argument("--headless") 20browser = webdriver.Chrome() 21time.sleep(INTERVAL) 22browser.get("https://incidecoder.com") 23time.sleep(INTERVAL) 24action = webdriver.ActionChains(browser) 25 26#roop 27for B in Brand: 28 browser.find_element(By.ID, "query").send_keys(B) 29 browser.find_element(By.XPATH, "//div[1]/div[2]/div[1]/form/input[2]").click() 30 time.sleep(INTERVAL) 31 32 for I in INCI: 33 FIND_BOX = browser.find_element(By.XPATH, "//*[@id='products']/form/div[1]/div/div/span/span[1]/span/ul/li/input") 34 PUT_ING = FIND_BOX.send_keys(I) 35 time.sleep(INTERVAL) 36 action.send_keys(Keys.ENTER).perform() 37 38 FILTER = browser.find_element(By.XPATH, "//*[@id='products']/form/input[2]") 39 FILTER.click() 40 time.sleep(INTERVAL) 41 42 browser.execute_script("window.scrollTo(0,document.body.scrollHeight);") 43 #input("continue?") 44 time.sleep(INTERVAL) 45 46 FIND_PLACE = browser.find_elements(By.CSS_SELECTOR, "div[class=std-side-padding] > a") 47 for i in FIND_PLACE: 48 print(i.text) 49 print(i.get_attribute('href')) 50 time.sleep(INTERVAL) 51 52 browser.execute_script("window.scrollTo(0,document.body.scrollHeight);") 53 time.sleep(INTERVAL) 54 55 while True: 56 if len(browser.find_elements(By.PARTIAL_LINK_TEXT, "Next page")) >0: 57 NEXT = browser.find_element(By.PARTIAL_LINK_TEXT, "Next page") 58 NEXT.click() 59 time.sleep(INTERVAL) 60 61 FIND_PLACE = browser.find_elements(By.CSS_SELECTOR, "div[class=std-side-padding] > a") 62 for i in FIND_PLACE: 63 print(i.text) 64 print(i.get_attribute('href')) 65 time.sleep(INTERVAL) 66 67 else: 68 browser.back() 69 time.sleep(INTERVAL) 70 CLEAR = browser.find_element(By.CLASS_NAME, "select2-selection__choice__remove") 71 CLEAR.click() 72 break 73
html
1<div class="my-select2-wrapper"> 2 <span class="my-select2-prerender select2 select2-container select2-container--default select2-container--below" dir="ltr"> 3 4 <span class="select2-selection select2-selection--multiple" role="combobox" aria-haspopup="true" aria-expanded="false" tabindex="-1"> 5 <span class="selection"> 6 <ul class="select2-selection__rendered"> 7 8 <li class="select2-selection__choice"> 9 <span class="select2-selection__choice__remove" role="presentation">×</span>Sodium PCA 10 </li>
試したこと・調べたこと
- teratailやGoogle等で検索した
- ソースコードを自分なりに変更した
- 知人に聞いた
- その他
上記の詳細・結果
・action.move_to_element(CLEAR).perform()
・browser.execute_script("window.scrollTo(0,0);")
など、ネットで調べながら色々試してみましたがうまくいきませんでした。
補足
エラーメッセージ
Traceback (most recent call last):
File "/main.py", line 73, in <module>
CLEAR.click()
File "/webelement.py", line 94, in click
self._execute(Command.CLICK_ELEMENT)
File "/webelement.py", line 395, in _execute
return self._parent.execute(command, params)
File "/webdriver.py", line 348, in execute
self.error_handler.check_response(response)
File "/errorhandler.py", line 229, in check_response
raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.ElementNotInteractableException: Message: element not interactable
(Session info: chrome=120.0.6099.234)
回答2件
あなたの回答
tips
プレビュー