前提・実現したいこと
https://itp.ne.jp/topic/?topic=225%3B772&sort=01&sbmap=false
こちらのサイトで「さらに表示する」を表示されるだけクリックして、全てクリック仕切ったら次の処理に進みたいです。
発生している問題・エラーメッセージ
Traceback (most recent call last): File "itown.py", line 21, in <module> while driver.find_element_by_class_name("m-read-more"): File "/Users/yudai/opt/anaconda3/lib/python3.7/site-packages/selenium/webdriver/remote/webdriver.py", line 564, in find_element_by_class_name return self.find_element(by=By.CLASS_NAME, value=name) File "/Users/yudai/opt/anaconda3/lib/python3.7/site-packages/selenium/webdriver/remote/webdriver.py", line 978, in find_element 'value': value})['value'] File "/Users/yudai/opt/anaconda3/lib/python3.7/site-packages/selenium/webdriver/remote/webdriver.py", line 321, in execute self.error_handler.check_response(response) File "/Users/yudai/opt/anaconda3/lib/python3.7/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":"css selector","selector":".m-read-more"} (Session info: chrome=78.0.3904.108)
該当のソースコード
python
1# itown メールアドレス スクレイピング 完成ばん 2from bs4 import BeautifulSoup 3from selenium import webdriver 4import requests 5import time 6import csv 7import re 8from selenium.common.exceptions import NoSuchElementException 9 10 11url_list = [] 12hpurl_list = [] 13adress_list = [] 14url = "https://itp.ne.jp/genre/?area=27&genre=4&subgenre=1028&sort=01&sbmap=false" 15 16# 「さらに表示」をクリックしまくる。 17driver = webdriver.Chrome(executable_path='chromedriver') 18driver.get(url) 19 20 21while driver.find_element_by_class_name("m-read-more"): 22 show_btn = driver.find_element_by_class_name("m-read-more") 23 show_btn.click() 24 # js実行までいっとき待つ。余裕を持って1ページ4秒の計算。 25 time.sleep(3) 26 27# ブラウザのHTMLを読み込む。 28res = driver.page_source 29soup = BeautifulSoup(res, "html.parser") 30 31for i in soup.find_all("a", class_='m-article-card__header__title__link'): 32 elem = i.get("href") + "shop/" 33 # url_listに格納 34 url_list.append(elem) 35 36 37driver = webdriver.Chrome(executable_path='chromedriver') 38for m in url_list: 39 driver.get(m) 40 res = requests.get(m) 41 res.raise_for_status() 42 time.sleep(1) 43 soup = BeautifulSoup(res.text, "html.parser") 44 45 # 企業名ゲット 46 try: 47 y = driver.find_element_by_css_selector("body > div.container > div > div > div > div.main > div > article.item.item-table > div > section.item-body.basic > dl:nth-child(1) > dd") 48 except NoSuchElementException: 49 adress_list.append("None") 50 else: 51 title = y.text 52 # 配列に格納 53 adress_list.append(title) 54 55 # 会社HPのURLゲット 56 try: 57 z = driver.find_element_by_xpath("/html/body/div[3]/div/div/div/div[1]/div/article[1]/div/section[1]/dl[9]/dd/div[1]/p[2]/a") 58 except NoSuchElementException: 59 adress_list.append("None") 60 else: 61 hp_url = z.get_attribute("href") 62 # 配列に格納 63 adress_list.append(hp_url) 64 65 # アドレスゲット 66 if soup.find_all('a', text=re.compile('@')): 67 for p in soup.find_all('a', text=re.compile('@')): 68 adress = p.text 69 # 配列に格納 70 adress_list.append(adress) 71 else: 72 adress_list.append('None') 73 74# 3列のcsv作成 75with open('itown_name_hp_ad.csv', 'w', newline='')as f: 76 w = csv.writer(f, quotechar='"', quoting=csv.QUOTE_MINIMAL) 77 for i in range(0, len(adress_list), 3): 78 w.writerow(adress_list[i:i+3]) 79
試したこと
while driver.find_element_by_class_name("m-read-more"):
show_btn = driver.find_element_by_class_name("m-read-more")
show_btn.click()
time.sleep(3)
の部分で、driver.find_element_by_class_name("m-read-more")によっての戻り値がなくなった時、なぜ次の処理に行かないのかわかりません。
falseではなく、Noneが戻り値として返ってきているのでしょうか?
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/11/29 11:20