我想单击 Python Selenium 中的下一个元素。由于shadow dom,我无法点击。我该怎么办?

问题描述 投票:0回答:1

我想单击 Python Selenium 中的下一个元素。 由于shadow dom,我无法点击。我应该怎么办? 我的代码是这个,对应的html是这个

enter image description here

browser.get('https://ownist.kr/member/login.html')
time.sleep(5)

iframe = browser.find_element(By.XPATH, '/html/body/iframe[3]')  # Replace with the actual XPATH
browser.switch_to.frame(iframe)

def expand_shadow_element(element):
  shadow_root = browser.execute_script('return arguments[0].shadowRoot', element)
  return shadow_root

#the above becomes 
shadow_section = expand_shadow_element(browser.find_element(By.XPATH,'//*[@id="ch-shadow-root-wrapper"]'))
shadow_section.find_element(By.CSS_SELECTOR,".PopupCloseBtn__CloseButton-ch-front__sc-14jjsiy-1 fOmWsj").click()

提前谢谢您

我点击了shadow dom中的一个元素,但是效果不佳。

python selenium-webdriver shadow-dom
1个回答
0
投票
  1. 您的影子根目录未放置在 iframe 中
  2. shadow-root 的定位器不正确

您的情况下的影子根主机是

#ch-plugin-entry div

此外,您的模式显示为异步

driver.get('https://ownist.kr/member/login.html')
sleep(10)

dialog = wait.until(EC.presence_of_element_located((By.CSS_SELECTOR,'#ch-plugin-entry div')))
shadow_section = expand_shadow_element(dialog)
shadow_section.find_element(By.CSS_SELECTOR, "[class*=PopupCloseBtn]").click()

但这对于关闭模式的情况来说不是一个好方法。

我建议通过JS隐藏它。这样你就不会因为等待而睡觉。

driver.get('https://ownist.kr/member/login.html')

dialog = wait.until(EC.presence_of_element_located((By.CSS_SELECTOR,'#ch-plugin-entry div')))
driver.execute_script('arguments[0].style.display = "none";', dialog)
© www.soinside.com 2019 - 2024. All rights reserved.