selenium Java:接受ShadowRoot中的所有Cookie

yhuiod9q  于 2023-01-30  发布在  Java
关注(0)|答案(3)|浏览(256)

这是我的网址:
DM
这是我的定位器按钮接受所有:

@FindBy( xpath = "//button[@data-testid = 'uc-accept-all-button']")
    WebElement cookies;

这是HTML:

我使用Selenium 4和Java。我尝试这样的解决方案:

public void acceptAllCookies( ) {

        cookies = driver.executeScript("return document.querySelector('#usercentrics-root').shadowRoot.querySelector("cookies")");
        cookies.click();
    }

但它不工作。我有这样的错误:

有什么帮助吗?我是一个初学者,所以我第一次看到这个
我尝试添加更多的"标记,就像我在这里找到的解决方案,但我得到了整个executeScript像文本。

jvlzgdj9

jvlzgdj91#

您需要在"cookies"中使用转义序列。

cookies = driver.executeScript("return document.querySelector('#usercentrics-root').shadowRoot.querySelector(\"cookies\")");
jxct1oxe

jxct1oxe2#

如果您的css选择器是cookie而不是java变量,则必须在js.executeScript方法中使用单引号将cookie括起来。并且上面定义的Cookie是WebElement,在调用executeScript方法时不能直接使用。

cookies = driver.executeScript("return document.querySelector('#usercentrics-root').querySelector(button[data-testid = 'uc-accept-all-button'])");

这并不能解决您的问题,请详细解释您的问题。

oewdyzsn

oewdyzsn3#

元素Prihvite sve按钮在#shadow-root (open)范围内

溶液
要单击所需的元素,您需要使用querySelector(),并且可以使用以下locator strategies

driver.get("https://www.dm.rs/?wt_mc=sea.google.ads_generic.15146192844.132927670207.558370268562");
Thread.sleep(5000);
WebElement element = driver.findElement(By.cssSelector("#usercentrics-root"));
SearchContext context = element.getShadowRoot();
WebElement cookieAcceptAll = context.findElement(By.cssSelector("button[data-testid='uc-accept-all-button']"));
cookieAcceptAll.click();

参考文献

您可以在以下内容中找到一些相关的详细讨论:

相关问题