前提・実現したいこと
Pythonでwhile文を利用したスクレイピングの繰り返し処理を行いたいです。
出発地を固定して到着地を変化させながらデータ抽出を行い、全てが終わった後に出発地も同様に変化させながらデータ抽出を行いたいと思っています。
変数iを用いてxpathを指定して繰り返し処理を行おうとしましたが、エラーが出てしまいました。
また、airtrip-title-list-airportというクラスの有無によって処理を変化させたいのですが、この記述方法よりも簡潔な記述方法があれば教えていただきたいです。
発生している問題・エラーメッセージ
Traceback (most recent call last): File "/xxx.py", line 32, in <module> start_places[i] = driver.find_element_by_xpath("//*[@id='dep_list']/ul/li[i]") File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/selenium/webdriver/remote/webdriver.py", line 394, in find_element_by_xpath return self.find_element(by=By.XPATH, value=xpath) File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/selenium/webdriver/remote/webdriver.py", line 976, in find_element return self.execute(Command.FIND_ELEMENT, { File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/selenium/webdriver/remote/webdriver.py", line 321, in execute self.error_handler.check_response(response) File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/selenium/webdriver/remote/errorhandler.py", line 242, in check_response raise exception_class(message, screen, stacktrace) selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"xpath","selector":"//*[@id='dep_list']/ul/li[i]"} (Session info: chrome=89.0.4389.90)
該当のソースコード
Python
1from selenium import webdriver 2import time 3import csv 4import requests 5from bs4 import BeautifulSoup as bs4 6from selenium import webdriver 7 8driver = webdriver.Chrome(executable_path=r"/Applications/chromedriver") #ブラウザの立ち上げ 9driver.get("https://www.airtrip.jp/air-lp/") #アクセスする 10r = requests.get('https://www.airtrip.jp/air-lp/') 11text = r.text 12soup = bs4(text,'html.parser') 13 14time.sleep(4) 15 16#配列作成 17start = driver.find_element_by_id("show_dep_list") 18start.click() 19time.sleep(2) 20 21elems = driver.find_elements_by_xpath("//*[@id='dep_list']/ul/li") 22start_places = [] 23for elem in elems: 24 attr = elem.get_attribute("data-airport_name") 25 start_places.append(attr) 26print (start_places) 27 28i=14 29while(i<len(start_places)): 30 start_places[i] = driver.find_element_by_xpath("//*[@id='dep_list']/ul/li[i]") 31 if len(driver.find_element_by_class_name("airtrip-title-list-airport")) >0: 32 continue 33 else: 34 start_places[i].click() 35 time.sleep(2) 36 37 i += 1
試したこと
iを{i}で囲んでみましたが、解決には至りませんでした。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。