[Python selenium] driver.find_elementsによる要素の読込

実現したいこと

・driver.find_elementsによる<button>要素の読込
・By.XPATHの要素後の打ち方(div[1]などの要素名の後の数字の扱い)の確認

前提

○背景
現在、yahooニュースのコメントへのリプライ読込を試しています。
https://news.yahoo.co.jp/articles/0fdf20fc753a62a6c4bb4e2b4e9bd9f705124d8e/comments
(サイトの返信にあたるところです)
リプライを読み込むための前準備として、リプライ欄を表示させるために
driver.find_elementsを使って要素を読み込めるかを確認したところ、エラーが発生しました。

○問題点
掲載しているコードでエラーが発生しましたので、原因追及のためいくつかテストをしましたが
いずれも解決には至っておりません。
(後述)

これに対して、

・buttonは読み込めるのか?
・読めるならどうしたらよいか?

上記についてご教示いただきたいです。
よろしくお願いします。

発生している問題・エラーメッセージ

(中略) raise exception_class(message, screen, stacktrace) selenium.common.exceptions.NoSuchWindowException: Message: no such window: target window already closed from unknown error: web view not found (Session info: chrome=118.0.5993.118) Stacktrace: GetHandleVerifier[---] (No symbol) [---] ...    (中略)     ...     RtlUserThreadStart [---]

該当のソースコード

Python

1import json 2import requests 3from bs4 import BeautifulSoup 4from urllib.parse import urljoin 5 6from selenium import webdriver 7from selenium.webdriver.chrome.service import Service 8from selenium.webdriver.common.by import By 9from selenium.webdriver.support.ui import WebDriverWait 10from selenium.webdriver.support import expected_conditions as EC 11from selenium.webdriver.support.ui import Select 12import time 13 14yahoo_news_url = 'https://news.yahoo.co.jp/pickup/6479600'15res = requests.get(yahoo_news_url)16soup = BeautifulSoup(res.text, 'html.parser')17 18preloaded = soup.select_one('script:-soup-contains("window.__PRELOADED_STATE__")').text 19json_text = preloaded.split('=', 1)[1].strip()20json_dict = json.loads(json_text)21url = json_dict['commentShort']['commentUrl']22url = urljoin(yahoo_news_url, url)23#後追いで内容を確認24 25driver=webdriver.Chrome() #Chromeを読み込む26driver.implicitly_wait(10) #10sまで待つ27driver.get(url) #url入力28time.sleep(3)29 30btn_name = (By.XPATH, '//*[@class="sc-kZlRmK cyNWll"]/button')31btn_el=driver.find_elements(*btn_name) 32 33print(btn_el)

試したこと

①//*[@class="sc-kZlRmK cyNWll"]/button のbuttonをdivに差し替える
→他の要素なら読み込めるのかを確認するため
結果:読み込めた、多分buttonだと読み込めない?

②//*[@class="sc-kZlRmK cyNWll"]/buttonのあとに、"[1]"をつける
→buttonは2つあったので、どちらかを指定しないといけないかと考えたため
結果:読み込めなかった。

補足情報(FW/ツールのバージョンなど)

windows 11
IDLE Shell 3.11.5

ChromeDriver 114.0.5735.90
selenium 4.14.0

補足
サイトのHTMLを確認したところ、buttonの下に波線が入っており、"flex"と書かれたマークがありました。
このことから、buttonは特別なタグと認識していますがよいでしょうか?

コメントを投稿

0 コメント