如何在元素为 data-testid 时处理弹出窗口 "Accepting all cookies" - 在 Python 中使用 Selenium

How to handle the popup "Accepting all cookies" when the element is data-testid - Using Selenium in Python

所以我开始了一个新项目来帮助解决我工作的太阳能电池板的中等业务......基本上我想从一个特定的网站获取数据,然后在我的 GUI 上看到另一个我的朋友正在处理它...我的主要问题是当我使用 python 打开带有 selenium 的网站时,弹出的 cookie“接受所有 cookie”已经显示出来,因为我是 selenium 的新手,所以我不知道我不知道如何处理这个问题我已经搜索了大约 2 天,但我尝试过的任何方法都没有用,所以我假设我是一个特例 xD...

这里是你们需要知道的所有信息来帮助我:

► URL ◄

https://www.kostal-solar-portal.com/#/

► 图片◄

[图1] = https://i.stack.imgur.com/ZR89s.png |

[图2] = https://i.stack.imgur.com/Zirft.png |

► 代码◄

`driver = webdriver.Chrome(PATH)

driver.implicitly_wait(10)

kostal_url = "https://www.kostal-solar-portal.com/#/"

driver.get(kostal_url)

driver.find_element_by_xpath('//*[@id="usercentrics-root"]//div/div/div[1]')
cookies = WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH,)))
cookies.click()`

► 错误 ◄

Traceback (most recent call last):
  File "c:/Users/Hp/Desktop/ΜΑΚΗΣ/App/open_websites.py", line 27, in <module>
     driver.find_element_by_xpath('//*[@id="usercentrics-root"]//div/div/div[1]')
  File "C:\Users\Hp\AppData\Local\Programs\Python\Python37\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 520, in find_element_by_xpath
     return self.find_element(by=By.XPATH, value=xpath)
  File "C:\Users\Hp\AppData\Local\Programs\Python\Python37\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 1246, in find_element
    'value': value})['value']
  File "C:\Users\Hp\AppData\Local\Programs\Python\Python37\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 424, in execute
    self.error_handler.check_response(response)
  File "C:\Users\Hp\AppData\Local\Programs\Python\Python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 247, in check_response
    raise exception_class(message, screen, stacktrace)
  selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"xpath","selector":"//*[@id="usercentrics-root"]//div/div/div[1]"}

元素全部接受内。


解决方案

要单击 全部接受,您必须使用 and you can use the following :

  • 代码块:

    driver.get("https://www.kostal-solar-portal.com/#/")
    time.sleep(5)
    element = driver.execute_script("""return document.querySelector('#usercentrics-root').shadowRoot.querySelector("button[data-testid='uc-accept-all-button']")""")
    element.click()
    

参考资料

您可以在以下位置找到一些相关讨论:

您尝试访问的元素在 Shadow Root 中。
因此,您首先需要进入影子根目录,然后获取“接受 cookie”元素。
您还应该改进定位器。
这应该有效:

driver = webdriver.Chrome(PATH)
driver.implicitly_wait(10)
kostal_url = "https://www.kostal-solar-portal.com/#/"
driver.get(kostal_url)
shadow_section = driver.execute_script('return arguments[0].shadowRoot', find_element_by_id("usercentrics-root")) 
shadow_section.find_element_by_css('button[data-testid="uc-accept-all-button"]').click()