我try 了所有的选项从stackoverflow网站,我在编程实习.只需指示如何单击.

站点:https://calculator888.ru/random-generator/sluchaynoye-slovo

-哦,不.

<div class="knop_pusk_blok">
   <input type="button" id="genr" data-tip="skivo" value="Случайное Слово" class="knop_dstv_vchl">
</div>

我的一些try :


ublic class Main2 {
    public static void main(String[] args) throws IOException, InterruptedException {
        System.out.println("start");
        WebClient webClient = new WebClient(BrowserVersion.CHROME);
        webClient.getOptions().setCssEnabled(false);
        webClient.getOptions().setJavaScriptEnabled(false);
        webClient.getOptions().setThrowExceptionOnScriptError(false);
        webClient.getOptions().setUseInsecureSSL(true);
        webClient.getOptions().setThrowExceptionOnFailingStatusCode(false);
        webClient.getCookieManager().setCookiesEnabled(true);
        webClient.setAjaxController(new NicelyResynchronizingAjaxController());
        webClient.waitForBackgroundJavaScriptStartingBefore(10000);
        webClient.waitForBackgroundJavaScript(10000);


        HtmlPage page = webClient.getPage("https://calculator888.ru/random-generator/sluchaynoye-slovo");


        List<HtmlElement> countOfWords = page.getByXPath("//*[@id=\"klch\"]");
        System.out.println("Count of words is " + countOfWords.size());

        List<HtmlElement> setOfWords = page.getByXPath("//*[@id=\"psz\"]");//word!!1111
        System.out.println("set of words is " + setOfWords.size());

        for (HtmlElement item : countOfWords)
            item.setAttribute("data-vpmn", "10");

        countOfWords = page.getByXPath("//*[@id=\"klch\"]");
        System.out.println("Count of words AFTER is " + countOfWords.get(0).getAttribute("data-vpmn"));

        //press button
        HtmlInput input = page.getHtmlElementById("genr");
        //Html + ButtonInput + Input + SubmitInput

        HtmlPage after = input.click();
        webClient.waitForBackgroundJavaScript(10000);

        for (int i = 0; i < 20; i++) {
            if (after.getByXPath("//*[@id=\"psz\"]").size() != 1) {
                break;
            }
            synchronized (page) {
                page.wait(500);
            }
        }
        

        List<HtmlElement> setOfWords1 = after.getByXPath("//*[@id=\"psz\"]");//after
        System.out.println("set of words is AFTER CLICK " + setOfWords1.size());

        System.out.println("end");
    }

}

我已经试着找了两天的解决方案.谢谢你的任何帮助!

EDIT岁的谢碧燕26岁的S发表了 comments ,但我仍然有同样的问题:

package org.example;


import com.gargoylesoftware.htmlunit.NicelyResynchronizingAjaxController;
import com.gargoylesoftware.htmlunit.WebClient;
import com.gargoylesoftware.htmlunit.html.HtmlPage;
import com.gargoylesoftware.htmlunit.html.HtmlElement;

import java.io.IOException;

public class Main {
    public static void main(String[] args) throws IOException {

        WebClient webClient = new WebClient();
        webClient.setAjaxController(new NicelyResynchronizingAjaxController());
        webClient.getOptions().setJavaScriptEnabled(false);
        HtmlPage page = webClient.getPage("https://calculator888.ru/random-generator/sluchaynoye-slovo");
        webClient.waitForBackgroundJavaScript(10000);

        HtmlElement htmlInputLineOfWords = (HtmlElement) page.getByXPath("//*[@id=\"bov\"]").get(0);
        System.out.println("before click =" + htmlInputLineOfWords.getTextContent());
        webClient.waitForBackgroundJavaScript(10000);
        HtmlElement button = (HtmlElement) page.getElementById("genr");

        page = button.click();
        htmlInputLineOfWords = (HtmlElement) page.getByXPath("//*[@id=\"bov\"]").get(0);
        System.out.println("after click = " + htmlInputLineOfWords.getTextContent());
            System.out.println(page.asText());

    }
}

和pom.xml:

<dependency>
   <groupId>net.sourceforge.htmlunit</groupId>
   <artifactId>htmlunit</artifactId>
   <version>2.13</version>
</dependency>

推荐答案

好的,这个页面有点棘手,但通过一些黑客攻击,我们可以让它工作. 下面的代码适用于HtmlUnit3.9.0版.

import java.io.IOException;
import java.net.URL;
import java.nio.charset.StandardCharsets;
import java.util.Collections;

import org.htmlunit.BrowserVersion;
import org.htmlunit.WebClient;
import org.htmlunit.WebRequest;
import org.htmlunit.WebResponse;
import org.htmlunit.WebResponseData;
import org.htmlunit.html.HtmlPage;
import org.htmlunit.util.WebConnectionWrapper;

public class Random {

    public static void main(String[] args) throws IOException {
        String url = "https://calculator888.ru/random-generator/sluchaynoye-slovo";

        try (final WebClient webClient = new WebClient(BrowserVersion.FIREFOX)) {
            webClient.getOptions().setThrowExceptionOnScriptError(false);

            new WebConnectionWrapper(webClient) {

                @Override
                public WebResponse getResponse(final WebRequest request) throws IOException {
                    final URL url = request.getUrl();

                    // block some tracker scripts
                    if ("https://mc.yandex.ru/metrika/tag.js".equals(url.toExternalForm())
                            || "https://yandex.ru/ads/system/context.js".equals(url.toExternalForm())) {
                        // construct empty response
                        final String content = "";
                        final WebResponseData data = new WebResponseData(content.getBytes(StandardCharsets.UTF_8), 200, "blocked", Collections.emptyList());
                        final WebResponse blocked = new WebResponse(data, request, 0L);
                        return blocked;
                    }

                    if (url.toExternalForm().startsWith("https://calculator888.ru/js/generator-sluchaynyh/gener_sluch_chisl.js")) {
                        String js = super.getResponse(request).getContentAsString();

                        // this js contains some statements not supported by our Rhino based js engine
                        // replace them with something working
                        js = js.replace("function pskGen(rrr=(0O57060516-0xbc614d)){",
                                "function pskGen(){"
                                + "var rrr = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 12345678 - 0xbc614d;");
                        js = js.replace("function gSch(rrr=(0O57060516-0xbc614d)){",
                                "function gSch(){"
                                + "var rrr = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 12345678 - 0xbc614d;");
                        js = js.replace("function itogPkazDann(shr=(0O57060516-0xbc614d)){",
                                "function itogPkazDann(){"
                                + "var shr = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 12345678 - 0xbc614d;");
                        js = js.replace("function gBkr(zmn=(0x75bcd15-0O726746425)){",
                                "function gBkr(){"
                                + "var zmn = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0x75bcd15-0O726746425;");
                        js = js.replace("function gDnr(rrr=(0O57060516-0xbc614d)){",
                                "function gDnr(){"
                                + "var rrr = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 12345678 - 0xbc614d;");
                        js = js.replace("function itogPkazDann(rrr=(0O57060516-0xbc614d)){",
                                "function itogPkazDann(){"
                                + "var rrr = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 12345678 - 0xbc614d;");
                        js = js.replace("function pkazDannItogNik(rrr=(0O57060516-0xbc614d)){",
                                "function pkazDannItogNik(){"
                                + "var rrr = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 12345678 - 0xbc614d;");
                        js = js.replace("function pkazDannItog(rrr=(0O57060516-0xbc614d)){",
                                "function pkazDannItog(){"
                                + "var rrr = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 12345678 - 0xbc614d;");

                        js = js.replace("function rbotPkazItog(okn_msv,sohr=(0O57060516-0xbc614d)){",
                                "function rbotPkazItog(okn_msv){"
                                + "var sohr = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 12345678 - 0xbc614d;");
                        js = js.replace("function mySortVse(dan_mas,kak=(0x75bcd15-0O726746425)){",
                                "function mySortVse(dan_mas){"
                                + "var kak = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0x75bcd15 - 0O726746425;");

                        // not correct but seems to have no effect for this problem
                        js = js.replace("return {[cYdk]:rzd_hls,[wl6j]:rzd_okn};",
                                "return 'todo';");

                        // construct alternative response
                        final WebResponseData patchedJs = new WebResponseData(js.getBytes(StandardCharsets.UTF_8), 200, "OK", Collections.emptyList());
                        return new WebResponse(patchedJs, request, 0L);
                    }

                    return super.getResponse(request);
                }
            };

            HtmlPage page = webClient.getPage(url);

            String result = page.getElementById("bov").asNormalizedText();
            System.out.println(result);

            page.getElementById("genr").click();
            webClient.waitForBackgroundJavaScriptStartingBefore(1_000);

            result = page.getElementById("bov").asNormalizedText();
            System.out.println(result);

            page.getElementById("genr").click();
            webClient.waitForBackgroundJavaScriptStartingBefore(1_000);

            result = page.getElementById("bov").asNormalizedText();
            System.out.println(result);
        }
    }
}

Java相关问答推荐

Java字符串常数池困惑

Oracle DUAL表上使用DDL时jOOQ问题的解析'

相同的Java SerializedLambda为implMethodKind返回不同的结果

Java编译器抛出可能未正确初始化的错误?

如何在ApachePOI中将图像添加到工作表的页眉?

如何让JavaFx应用程序识别依赖项?

格式中的特定回录键-值对

如何在JavaFX中处理多个按钮

如何仅使用键/ID的一部分(组合)高效地返回映射值?

如何在不删除Java中已有内容的情况下覆盖文件内容?

使用htmlunit和java单击按钮

如何读取3个CSV文件并在控制台中按顺序显示?(Java)

如何配置空手道以使用FeignClient或RestTemplate代替ApacheHttpClient

如何生成指定范围内的11位序列号?

如何处理两个几乎相同的XSD文件?

字符串的Gzip压缩在java11和java17中给出了不同的结果

按长度排序字符串数组

如何设置默认序列生成器分配大小

在数组中查找素数时出现逻辑错误

什么是;u〃;平均值;jdku;在java开发工具包中?