shadow-rootで囲まれたテキストボックスのスクレイピング方法について
Q&A
Closed
解決したいこと
Python スクレイピング
shadow-rootに囲まれたテキストボックスに文字を入力し、エンターボタン押下で検索を行いたい
メルカリの検索ボックス部分
https://jp.mercari.com/
対象テキストボックスのxpath
//*[@id="gatsby-focus-wrapper"]/div/div/header/mer-navigation-top/mer-autocomplete/div[1]/mer-search-input//form/input
発生している問題・エラー
searchBox = shadow_root. find_element(By.CSS_SELECTOR,"form > input")
AttributeError: 'dict' object has no attribute 'find_element'
エラーキャプチャ
該当するソースコード
from selenium import webdriver
from selenium.webdriver.common.keys import Keys as keys
from selenium.webdriver.common.action_chains import ActionChains
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome import service
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
import time
import statistics
import chromedriver_binary
def mercariPriceCalc(url,procuctNames):
#ChromeDriverのテンプレ
driver = webdriver.Chrome()
driver.implicitly_wait(10)
driver.get(url)
#2秒待機
time.sleep(2)
#返却用の平均価格マップ{商品名:平均価格}
AveragePrice = {}
for procuctName in procuctNames:
element = driver.find_element(By.CSS_SELECTOR,"#gatsby-focus-wrapper > div > div > header > mer-navigation-top > mer-autocomplete > div:nth-child(1) > mer-search-input")
shadow_root = driver.execute_script('return arguments[0].shadowRoot', element)
searchBox = shadow_root. find_element(By.CSS_SELECTOR,"form > input")
searchBox.sendKesy(productName)
自分で試したこと
以下複数記事を参考にし、ドライバーのバージョンやpythonのバージョン、chromeのバージョン変更しましたが改善せず
###参考記事
https://zenn.dev/atom/articles/750f9660f6a70a
https://marokoron.hatenablog.com/entry/2022/01/27/200000
https://github.com/SeleniumHQ/selenium/issues/10171
https://shinshin86.hateblo.jp/entry/2021/11/25/075111