Python Selenium 无法使用 Selenium 和 Python 在#shadow-root (open) 中通过 xpath 找到元素
Posted
技术标签:
【中文标题】Python Selenium 无法使用 Selenium 和 Python 在#shadow-root (open) 中通过 xpath 找到元素【英文标题】:Python Selenium can't find element by xpath within #shadow-root (open) using Selenium and Python 【发布时间】:2022-01-15 10:52:19 【问题描述】:我正在浏览这个网站:https://www.aldi-onlineshop.de/p/multimedia-pc-s23004-md34655-1014700/ 我尝试使用以下脚本单击按钮:“Alle bestätigen”:
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
driver = webdriver.Chrome()
driver.get("https://www.aldi-onlineshop.de/p/multimedia-pc-s23004-md34655-1014700/")
agree = driver.find_element_by_xpath('/html/body/div[4]//div/div/div/div/div/div[2]/div/div/div/div[1]/button')
agree.click()
但这不起作用,它收到了错误:
no such element: Unable to locate element: "method":"xpath","selector":"/html/body/div[4]//div/div/div/div/div/div[2]/div/div/div/div[1]/button"
(Session info: chrome=96.0.....)
我怎样才能解决这个问题,让它找到元素?
【问题讨论】:
【参考方案1】:你的xpath可能不正确,建议你一步一步往下走,例如:
agree = driver.find_element_by_xpath('/html/body/div[4]/)
如果正确:
agree = driver.find_element_by_xpath('/html/body/div[4]/div/)
...
我注意到的另一件事是,双重"//"
是想要的吗? ('/html/body/div[4]//div...)
【讨论】:
【参考方案2】:元素Alle bestätigen按钮在#shadow-root (open)内
解决方案
在你需要使用querySelector()的所需元素上click(),你可以使用以下Locator Strategy:
driver.get("https://www.aldi-onlineshop.de/p/multimedia-pc-s23004-md34655-1014700/")
time.sleep(5)
driver.execute_script('''return document.querySelector('div#usercentrics-root').shadowRoot.querySelector('button[data-testid="uc-accept-all-button"]')''').click()
参考文献
您可以在以下位置找到一些相关的详细讨论:
How to extract info within a #shadow-root (open) using Selenium Python? How to get past a cookie agreement page using Python and Selenium?【讨论】:
非常感谢。这对我有用。但是为什么我的代码不起作用?它会与 ec 可见性或类似的东西一起工作吗? 如果有#shadow-root (open),你必须使用querySelector()
。即使是WebDriverWait 一个人也做不到。以上是关于Python Selenium 无法使用 Selenium 和 Python 在#shadow-root (open) 中通过 xpath 找到元素的主要内容,如果未能解决你的问题,请参考以下文章
Selenium 似乎无法在 Firefox 49.0 上正常工作,有人熟悉吗?
无法通过 perl 绑定连接 selenium webDriver
python+selenium ?????????????????? ??????