我目前正在尝试将 Python 与 Selenium 结合起来。在这里我遇到了 JavaScript 按钮的主题。我正在寻找最聪明的方法来找出如何以最简单的方式执行 JavaScript 代码(在本例中是一个按钮)。
我的目标:
第一和第二,我通过大量研究得出了正确的结论。现在是时候单击按钮了。这在代码中可以很好地识别,但我仍然没有成功点击。
<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()
最后一部分不起作用。
这是我要点击的按钮:
元素 Jetzt berechnen 位于 #shadow-root (open) 内,并且是一个
<input>
元素。
要单击 Jetzt berechnen,您可以使用以下代码行:
berechnen_button = browser.execute_script("""return document.querySelector('kredit-rechner').shadowRoot.querySelector('input.calculator__submit-button')""")
berechnen_button.click()
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()