通过 Python 和 Selenium 单击#shadow-root(打开)中的按钮的最佳方法

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

我目前正在尝试将 Python 与 Selenium 结合起来。在这里我遇到了 JavaScript 按钮的主题。我正在寻找最聪明的方法来找出如何以最简单的方式执行 JavaScript 代码(在本例中是一个按钮)。

我的目标:

  1. 打开网页 http://www.easyCredit.de
  2. 接受那里的鹦鹉
  3. 单击“Jetzt berechnen”按钮
  4. 单击“Zu den finanziellen Angaben”按钮

第一和第二,我通过大量研究得出了正确的结论。现在是时候单击按钮了。这在代码中可以很好地识别,但我仍然没有成功点击。

<input type="submit" class="calculator__submit-button" value="calculate now">

我现在已经尝试过类似cockies的方法,但不幸的是它不起作用。我希望你能帮助我。

这是我的代码:

from selenium import webdriver
from selenium.webdriver.common.by import By
import time

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

# link to Chromedriver
browser = webdriver.Chrome('/usr/local/bin/chromedriver')

# maximize window
browser.maximize_window()

# URL
browser.get('https://www.easycredit.de/')

# wait
time.sleep(5)

# accept cookies
coockie_button = browser.execute_script("""return document.querySelector('#usercentrics-root').shadowRoot.querySelector("button[data-testid='uc-accept-all-button']")""")
coockie_button.click()

# wait
time.sleep(5)

# click "Jetzt berechnen" 
berechnen_button = browser.execute_script("""return document.querySelector('rr-62f0ff69f069c').shadowRoot.querySelector("button[class='calculator__submit-button']")""")
berechnen_button.click()

最后一部分不起作用。

这是我要点击的按钮:

python selenium shadow-dom queryselector shadow-root
2个回答
1
投票

元素 Jetzt berechnen 位于 #shadow-root (open) 内,并且是一个

<input>
元素。

Jetzt


解决方案

要单击 Jetzt berechnen,您可以使用以下代码行:

berechnen_button = browser.execute_script("""return document.querySelector('kredit-rechner').shadowRoot.querySelector('input.calculator__submit-button')""")
berechnen_button.click()

1
投票

Selenium 4 引入了一种访问影子 DOM 元素的新方法:

shadow_root=elem.shadow_root

shadow_root = driver.find_element(By.CSS_SELECTOR, "kredit-rechner").shadow_root
berechnen_button = shadow_root.find_element(By.CSS_SELECTOR, "input.calculator__submit-button")
berechnen_button.click()
© www.soinside.com 2019 - 2024. All rights reserved.