无法点击按钮?

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

我尝试使用以下代码单击按钮 -

import time
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By

if __name__ == '__main__':  
  print(f"Checking Browser driver...")
  options = Options()
  options.add_argument("start-maximized")
  options.add_argument('--log-level=3')  
  options.add_experimental_option("prefs", {"profile.default_content_setting_values.notifications": 1})    
  options.add_experimental_option("excludeSwitches", ["enable-automation"])
  options.add_experimental_option('excludeSwitches', ['enable-logging'])
  options.add_experimental_option('useAutomationExtension', False)
  options.add_argument('--disable-blink-features=AutomationControlled') 
  srv=Service()
  driver = webdriver.Chrome (service=srv, options=options)    
  waitWD = WebDriverWait (driver, 10)         
  
  link = "https://www.arbeitsagentur.de/jobsuche/jobdetail/10001-1000341861-S"
  driver.get (link)     
  time.sleep(3) 
  waitWD.until(EC.element_to_be_clickable((By.XPATH, '//button[@class="ba-btn ba-btn-primary"]'))).click()

但是当我运行此代码时,出现以下错误 -

(selenium) C:\DEV\Fiverr2024\TRY\ben_hypace>python temp1.py       
Checking Browser driver...
Traceback (most recent call last):
  File "C:\DEV\Fiverr2024\TRY\ben_hypace\temp1.py", line 28, in <module>
    waitWD.until(EC.element_to_be_clickable((By.XPATH, '//button[@class="ba-btn ba-btn-primary"]'))).click()
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\DEV\.venv\selenium\Lib\site-packages\selenium\webdriver\support\wait.py", line 105, in until
    raise TimeoutException(message, screen, stacktrace)
selenium.common.exceptions.TimeoutException: Message:

为什么这个红色按钮“Alles zulassen”没有在使用selenium的网站上点击?

python selenium-webdriver
1个回答
0
投票

为什么这个红色按钮“Alles zulassen”没有在使用selenium的网站上点击?

上面的答案是因为目标元素位于 shadow-root 元素内。

参考下面的代码来处理

clicks
元素中的
shadow-root

shadow_host = waitWD.until(EC.presence_of_element_located((By.TAG_NAME, 'bahf-cookie-disclaimer-dpl3')))
shadow_root = shadow_host.shadow_root
cookie_button = WebDriverWait(shadow_root, 10).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "button.ba-btn.ba-btn-primary")))
driver.execute_script("arguments[0].click();", cookie_button)

参考资料 - https://stackoverflow.com/a/78471405/7598774

© www.soinside.com 2019 - 2024. All rights reserved.