実現したいこと
yahoo知恵袋の質問文をスクレイピングし、csvに格納する。
前提
ここに質問の内容を詳しく書いてください。
pythonでスクレイピングをできるプログラムを作成中です。
質問文の取得は途中まではできるのですが、
途中でとまって(止まるタイミングもランダム)以下のエラーメッセージが発生しています。
発生している問題・エラーメッセージ
質問数に関しては気にしないでください、
['約146', '中1~10', '目'] 約146 質問番号 1 質問番号 2 質問番号 3 質問番号 4 質問番号 5 質問番号 6 質問番号 7 Traceback (most recent call last): File "C:\Users\kusph\PycharmProjects\pythonProject1\main.py", line 105, in <module> browser.back() File "C:\Users\kusph\AppData\Local\Programs\Python\Python311\pythonproject\Lib\site-packages\selenium\webdriver\remote\webdriver.py", line 547, in back self.execute(Command.GO_BACK) File "C:\Users\kusph\AppData\Local\Programs\Python\Python311\pythonproject\Lib\site-packages\selenium\webdriver\remote\webdriver.py", line 344, in execute self.error_handler.check_response(response) File "C:\Users\kusph\AppData\Local\Programs\Python\Python311\pythonproject\Lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 229, in check_response raise exception_class(message, screen, stacktrace) selenium.common.exceptions.WebDriverException: Message: no such execution context (Session info: chrome=117.0.5938.48) Stacktrace: GetHandleVerifier [0x00007FF6E6AC7B82+55138] (No symbol) [0x00007FF6E6A378A2] (No symbol) [0x00007FF6E68ED95D] (No symbol) [0x00007FF6E68DC5B9] (No symbol) [0x00007FF6E68DA961] (No symbol) [0x00007FF6E68DB2EE] (No symbol) [0x00007FF6E68E7D4D] (No symbol) [0x00007FF6E68F8541] (No symbol) [0x00007FF6E68FC87A] (No symbol) [0x00007FF6E68DB937] (No symbol) [0x00007FF6E68F81D3] (No symbol) [0x00007FF6E6967919] (No symbol) [0x00007FF6E694E903] (No symbol) [0x00007FF6E6923711] (No symbol) [0x00007FF6E6924954] GetHandleVerifier [0x00007FF6E6E2C5D2+3613106] GetHandleVerifier [0x00007FF6E6E82450+3964976] GetHandleVerifier [0x00007FF6E6E7AAAF+3933839] GetHandleVerifier [0x00007FF6E6B631F6+691670] (No symbol) [0x00007FF6E6A424E8] (No symbol) [0x00007FF6E6A3E714] (No symbol) [0x00007FF6E6A3E842] (No symbol) [0x00007FF6E6A2EEB3] BaseThreadInitThunk [0x00007FF83C23257D+29] RtlUserThreadStart [0x00007FF83D9CAA68+40]
該当のソースコード
import time import pandas as pd from selenium import webdriver from selenium.common import NoSuchElementException, TimeoutException from selenium.webdriver.chrome.service import Service from selenium.webdriver.common.by import By from selenium.webdriver.support import expected_conditions as EC, wait from selenium.webdriver.chrome.options import Options from selenium.webdriver.chrome.service import Service as ChromeService from selenium.webdriver.chrome import service as fs from selenium.webdriver.support.wait import WebDriverWait from selenium.webdriver.support.ui import WebDriverWait options = Options() # Chrome Betaのバイナリファイルへのパスを設定 chrome_beta_path = 'C:/Program Files/Google/Chrome Beta/Application/chrome.exe' # Chrome Beta用のオプションを設定 chrome_options = webdriver.ChromeOptions() chrome_options.binary_location = chrome_beta_path # Chrome BetaのWebDriverを起動 chrome_service = ChromeService(executable_path='C:/Users/kusph/chromedriver-win64/chromedriver.exe') browser = webdriver.Chrome(service=chrome_service, options=chrome_options) browser.maximize_window() url = 'https://chiebukuro.yahoo.co.jp/search?p=%E9%9B%AA%E8%A6%8B%E5%A4%A7%E7%A6%8F&vaop=a&search=all&flg=3&dflg=4&dfrom_y=2021&dfrom_m=04&dfrom_d=01&dto_y=2023&dto_m=09&dto_d=11&noct=1' # URLを開く browser.get(url) # リンク一覧を格納するリストを準備 elem_urls = [] elem_dates = [] elem_texts = [] # while で find_element_by_link_text が breakするまでループ num=0 while True: elems = browser.find_elements(By.CLASS_NAME,'ListSearchResults_listSearchResults__heading__1T_RX') dates = browser.find_elements(By.CSS_SELECTOR, '.ListSearchResults_listSearchResults__informationDate__10t00') all= browser.find_element(By.XPATH,'/html/body/div/div/div/div/div[2]/div[1]/div[6]/p') print(all.text.split('件')) all_split=all.text.split('件') print(all_split[0]) for i in range(len(elems)): elem = browser.find_elements(By.CLASS_NAME,'ListSearchResults_listSearchResults__heading__1T_RX')[i] date = browser.find_elements(By.CSS_SELECTOR, '.ListSearchResults_listSearchResults__informationDate__10t00')[i] elem_urls.append(elem.get_attribute("href")) elem_dates.append(date.text) elem.click() num=num+1 time.sleep(7) try: question = browser.find_element(By.CSS_SELECTOR, 'div.ClapLv2QuestionItem_Chie-QuestionItem__Text__1AI-5') question_text = question.text elem_texts.append(question_text) print('質問番号', num) except Exception as e: print('質問の取得に失敗しました:',e) browser.switch_to.default_content() browser.back() time.sleep(5) scroll_script = "window.scrollTo(0, document.body.scrollHeight);" browser.execute_script(scroll_script) time.sleep(3) # ページ遷移後に少し待機して次の要素を取得 # 現在のページのURLを取得 current_page_url = browser.current_url data = { 'URL': elem_urls, '日にち': elem_dates, '質問': elem_texts } df = pd.DataFrame(data) # DataFrameをエクセルファイルに書き込み file_path = 'C:/Users/kusph/Desktop/output.xlsx' with pd.ExcelWriter(file_path,engine='openpyxl', mode='a', if_sheet_exists='replace') as writer: df.to_excel(writer, sheet_name='sheet11', index=False) print('質問数:', len(elem_urls)) try: next_button = browser.find_element(By.PARTIAL_LINK_TEXT, '次へ') next_button.click() time.sleep(3) except Exception as e: # 次へボタンが見つからない場合、プログラムを終了する print('次へボタンが見つかりませんでした。スクレイピングを終了します。') browser.quit() break wait = WebDriverWait(browser, 10) wait.until(EC.url_changes(current_page_url)) browser.quit()
試したこと
・chrome β版の最新VERに変更。
・timeで待機時間を多く設ける。
ここに問題に対して試したことを記載してください。
補足情報(FW/ツールのバージョンなど)
Python 3.11.4
chrome=117.0.5938.48
selenium 4.8.3
ずっとこのエラーで止まっています、、助けてください、、
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。