使用 Java 的 HTMLUnit:调用 click() 被忽略,因为目标元素未显示

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

我正在将 htmlunitJava, 一起使用,并且我尝试单击网站上的一个跨度,该跨度应该增加计数器并解锁另一个按钮,但不幸的是,它不起作用。 警告指出,该元素未显示,但当我在浏览器中打开网站时,该元素就在那里并且可以单击。

// Find all services to select "Sonstiges" service
List<DomElement> services = secondPage.getElementsByName("services");

for (DomElement service : services) {
    // Get correct service
    if (service.getNextElementSibling().getTextContent().equals("Sonstiges")) {
        service.getNextElementSibling().getNextElementSibling().getNextElementSibling()
                .getNextElementSibling().getChildElements().forEach(domElement -> {
            if (domElement.getTextContent().equals("+")) {
                // Press add service button
                try {
                    domElement.click();
                } catch (IOException e) {
                    logger.log(Level.WARNING, "Could not add service:\n" + Util.exceptionToString(e));
                }
            }
        });
        break;
    }
}

// Click submit
DomElement secondSubmitButton = secondPage.getElementById("forward-service");
HtmlPage thirdPage = secondSubmitButton.click();

当我运行此代码时,我收到很多有关 cookie 和 CSS 的警告,但我不确定它们是否对最后一个警告负责,该警告指出未单击带有“+”作为文本的

span
,所以
secondSubmitButton
不存在。

Nov. 06, 2023 3:56:17 PM org.apache.http.client.protocol.ResponseProcessCookies processCookies
WARNUNG: Cookie rejected [rc_sid99f7e7c958a84cb084fd362b95200aaa="48f8b876f10b4be18c670eb8fb37998d7b3898197b76443bab04b27a7fae1e9f", version:0, domain:.callup.kaiserslautern.de, path:/m/Fuehrerscheinstelle, expiry:Mon Nov 06 16:16:13 CET 2023] Illegal 'domain' attribute ".callup.kaiserslautern.de". Domain of origin: "onlinetermine.kaiserslautern.de"
Nov. 06, 2023 3:56:17 PM org.apache.http.client.protocol.ResponseProcessCookies processCookies
WARNUNG: Cookie rejected [rc_sid99f7e7c958a84cb084fd362b95200aaa="48f8b876f10b4be18c670eb8fb37998d7b3898197b76443bab04b27a7fae1e9f", version:0, domain:.callup.kaiserslautern.de, path:/m/Fuehrerscheinstelle, expiry:Mon Nov 06 16:16:13 CET 2023] Illegal 'domain' attribute ".callup.kaiserslautern.de". Domain of origin: "onlinetermine.kaiserslautern.de"
Nov. 06, 2023 3:56:17 PM org.htmlunit.DefaultCssErrorHandler error
WARNUNG: CSS error: 'https://onlinetermine.kaiserslautern.de/libs/semantic-ui-2.4.1/semantic.min.css' [59:8762] Error in class selector. (Invalid token "and". Was expecting one of: "only", "inherit", <IDENT>.)
Nov. 06, 2023 3:56:17 PM org.htmlunit.DefaultCssErrorHandler warning
WARNUNG: CSS warning: 'https://onlinetermine.kaiserslautern.de/libs/semantic-ui-2.4.1/semantic.min.css' [59:8762] Ignoring the whole rule.
Nov. 06, 2023 3:56:17 PM org.htmlunit.DefaultCssErrorHandler error
WARNUNG: CSS error: 'https://onlinetermine.kaiserslautern.de/libs/semantic-ui-2.4.1/semantic.min.css' [59:17897] Error in class selector. (Invalid token "and". Was expecting one of: "only", "inherit", <IDENT>.)
Nov. 06, 2023 3:56:17 PM org.htmlunit.DefaultCssErrorHandler warning
WARNUNG: CSS warning: 'https://onlinetermine.kaiserslautern.de/libs/semantic-ui-2.4.1/semantic.min.css' [59:17897] Ignoring the whole rule.
Nov. 06, 2023 3:56:17 PM org.htmlunit.DefaultCssErrorHandler error
WARNUNG: CSS error: 'https://onlinetermine.kaiserslautern.de/libs/semantic-ui-2.4.1/semantic.min.css' [75:15911] Error in class selector. (Invalid token "and". Was expecting one of: "only", "inherit", <IDENT>.)
Nov. 06, 2023 3:56:17 PM org.htmlunit.DefaultCssErrorHandler warning
WARNUNG: CSS warning: 'https://onlinetermine.kaiserslautern.de/libs/semantic-ui-2.4.1/semantic.min.css' [75:15911] Ignoring the whole rule.
Nov. 06, 2023 3:56:17 PM org.htmlunit.DefaultCssErrorHandler error
WARNUNG: CSS error: 'https://onlinetermine.kaiserslautern.de/libs/semantic-ui-2.4.1/semantic.min.css' [75:62364] Error in class selector. (Invalid token "and". Was expecting one of: "only", "inherit", <IDENT>.)
Nov. 06, 2023 3:56:17 PM org.htmlunit.DefaultCssErrorHandler warning
WARNUNG: CSS warning: 'https://onlinetermine.kaiserslautern.de/libs/semantic-ui-2.4.1/semantic.min.css' [75:62364] Ignoring the whole rule.
Nov. 06, 2023 3:56:18 PM org.htmlunit.WebConsole info
INFORMATION: [2023-11-06T14:56:18.683Z] WRN: module: clu.core is obselete use now rc.core, will removed in version 1.2.58
Nov. 06, 2023 3:56:19 PM org.apache.http.client.protocol.ResponseProcessCookies processCookies
WARNUNG: Cookie rejected [rc_sid99f7e7c958a84cb084fd362b95200aaa="48f8b876f10b4be18c670eb8fb37998d7b3898197b76443bab04b27a7fae1e9f", version:0, domain:.callup.kaiserslautern.de, path:/m/Fuehrerscheinstelle, expiry:Mon Nov 06 16:16:15 CET 2023] Illegal 'domain' attribute ".callup.kaiserslautern.de". Domain of origin: "onlinetermine.kaiserslautern.de"
Nov. 06, 2023 3:56:19 PM org.htmlunit.WebConsole info
INFORMATION: [2023-11-06T14:56:19.143Z] WRN: module: clu.core is obselete use now rc.core, will removed in version 1.2.58
Nov. 06, 2023 3:56:24 PM org.htmlunit.html.DomElement click
WARNUNG: Calling click() ignored because the target element 'HtmlSpan[<span class="counterButton" onclick="changecap(1,2,'bd59a4e2-288d-4117-b6df-45c694d076fd')">]' is not displayed.

如何确保

span
被显示,或者更确切地说被点击(也在不显示时)?我尝试等待 5 秒,但没有任何改变。
也许这与以下事实有关:
span
位于具有可滚动溢出的
div
中,而
span
几乎位于末尾。

java htmlunit
1个回答
0
投票

对于无头浏览器来说,进行布局和样式计算有时很困难...... 如果您的页面是公开的,请打开一个问题,我会尝试查找原因并在可能的情况下修复它。

但是有一个解决方法 - 请查看此 https://www.htmlunit.org/faq.html#clickNotWorking 常见问题解答条目。

希望有帮助,如果没有,请打开一个问题,我会看看。

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