首页 > 解决方案 > Selenium 接受 cookie python

问题描述

我正在尝试接受网站上的 cookie,遗憾的是我无法点击“全部接受”按钮。我直接在代码 time.sleep(10) 中,所以等待弹出/同意可见应该没有问题 - 这是我在类似线程中最常看到的。

driver.get("https://fischer.cz")
time.sleep(10)        
prijmoutVse = driver.find_element_by_xpath("//*[@class='sc-gtsrHT ctrzIr']")
driver.click(prijmoutVse)

我收到硒错误,说它无法找到元素。即使复制完整的 xpath,我也无法在浏览器中使用 xpath 帮助程序找到它,所有结果都是空的。

我也试过 driver.switch_to.alert 但没有让它工作。

尝试了以下定位器:

//*[@data-testid="uc-accept-all-button"]
/html/body/div[15]//section/div/div[2]/div[3]/div/div[1]/div/button[3]
//*[@id="uc-center-container"]/div[3]/div/div[1]/div/button[3]

这里的同意代码 是来自控制台的元素打印,我注意到有一些“flex”标签,但不太确定它们的含义或是否会造成麻烦。

在这一点上我有点绝望,因为它阻碍了我的工作,我想不出办法解决它。我会很高兴有任何意见或想法如何解决这个问题!

提前致谢

E1:尝试从 Cruisepandey 得到这个错误的答案

    Traceback (most recent call last):
  File "C:/Users/KDK/Desktop/NOVY SEARCH AUTO/test2.py", line 10, in <module>
    wait.until(EC.element_to_be_clickable((By.XPATH, "//button[@data-testid='uc-accept-all-button']"))).click()
  File "C:\Users\KDK\anaconda3\lib\site-packages\selenium\webdriver\support\wait.py", line 80, in until
    raise TimeoutException(message, screen, stacktrace)
selenium.common.exceptions.TimeoutException: Message: 


Process finished with exit code 1

E2:尝试了 pmadhu 的回答

Traceback (most recent call last):
  File "C:/Users/KDK/Desktop/NOVY SEARCH AUTO/test2.py", line 9, in <module>
    shadowroot.find_element_by_css_selector("#uc-center-container > div > div.sc-hiKfDv.gGhxCY > div > div.sc-ezzafa.bUHURR > div > button.sc-gtsrHT.ctrzIr").click()
  File "C:\Users\KDK\anaconda3\lib\site-packages\selenium\webdriver\remote\webelement.py", line 430, in find_element_by_css_selector
    return self.find_element(by=By.CSS_SELECTOR, value=css_selector)
  File "C:\Users\KDK\anaconda3\lib\site-packages\selenium\webdriver\remote\webelement.py", line 658, in find_element
    return self._execute(Command.FIND_CHILD_ELEMENT,
  File "C:\Users\KDK\anaconda3\lib\site-packages\selenium\webdriver\remote\webelement.py", line 633, in _execute
    return self._parent.execute(command, params)
  File "C:\Users\KDK\anaconda3\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 321, in execute
    self.error_handler.check_response(response)
  File "C:\Users\KDK\anaconda3\lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 242, in check_response
    raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"css selector","selector":"#uc-center-container > div > div.sc-hiKfDv.gGhxCY > div > div.sc-ezzafa.bUHURR > div > button.sc-gtsrHT.ctrzIr"}

标签: pythonseleniumweb

解决方案


该元素位于Shadow root

试试下面的代码。

driver.get("https://www.fischer.cz/")
root1 = driver.find_element_by_id("usercentrics-root")
shadowroot = driver.execute_script("return arguments[0].shadowRoot", root1)
shadowroot.find_element_by_css_selector("#uc-center-container > div > div.sc-hiKfDv.gGhxCY > div > div.sc-ezzafa.bUHURR > div > button.sc-gtsrHT.ctrzIr").click()

推荐阅读