0

オプションがクリックされたときに JavaScript を使用して新しいプロファイルに移動するサイトにドロップダウン リストがあります。問題は、HtmlUnitのオプションがドロップダウンボックスのオプションをクリックして選択しているだけだとは思わないので、新しいページに移動することはありません。Web ページのソースで確認したので、正しいドロップダウン要素を見つけていることがわかります。私も getOption() を使用しており、ドロップダウン ボックスのインデックス 4 を使用しているため、getOption(4) を使用していますが、それは問題になる可能性がありますか? 値とIDでも試しましたが、これがエラーにならない唯一の方法のようです。Thread.sleep も追加して、問題が発生した場合に備えて次のページに移動する時間を確保しましたが、役に立たなかったと思います。まとめとして、ナビゲートするためにオプションの1つを物理的にクリックする必要があります。

ここに私のHtmlUnitコードがあります:

public static void changeIntensity(String value) throws IOException {
    try {

        final WebClient webClient = new WebClient(BrowserVersion.CHROME);
        DefaultCredentialsProvider creds = new DefaultCredentialsProvider();
        creds.addCredentials(Main.USERNAME, Main.PASSWORD);
        webClient.setCredentialsProvider(creds);
        final HtmlPage page = webClient.getPage("http://192.168.1.30/profiles.sht"); // nav to profiles
        System.out.println("Logged into AquaController.");
        HtmlSelect select = (HtmlSelect) page.getElementByName("profileSel"); // this is for sure correst, i checked in profiles.asp == also, i tried a diff one and it said out of range, so this is correct.
        System.out.println("Selected profile dropdown box.");
        HtmlOption option =  select.getOption(4); // select blue 20 (its profule #12) - no use getOptionByText
        select.setSelectedAttribute(option, true);
        System.out.println("Selected option.");
        System.out.println("Thread sleeping for 5");
        Thread.sleep(5000);
        System.out.println("Thread done sleeping for 5");
        HtmlInput pMin = page.getElementByName("profileLMin"); // min intensity - name =
        HtmlInput pMax = page.getElementByName("profileLMax"); // max intensity
        pMin.click();
        pMin.setValueAttribute(value);
        pMax.click();
        pMax.setValueAttribute(value);
        HtmlElement updateProfile = page.getElementByName("Update");
        updateProfile.click();
        System.out.println("finished");
    } 
    catch (InterruptedException e) {
        e.printStackTrace();
    }
}

関連するウェブサイトのソースは次のとおりです。

    <div id='title'>
<br>
<h2>Apex Profile Setup</h2>
<br>
</div>
<script type="text/javascript">
leafHeight = 220;
//if (window.addEventListener){
//  window.addEventListener("load", autoInit, false);
//}
//else if (window.attachEvent){
//  window.attachEvent("onload", autoInit);
//}

function autoInit()
{
    var selector = document.getElementsByName("profileTypeSel");
    showLeaf(1, selector[0].selectedIndex+1);
    init();
}

function updatepSelect() {
document.pSelect.submit("profiles.sht");
}


<P> 
<form name="pSelect" method="post" action="profiles.sht">Profile:&nbsp;
        <select class="tbflat" name="profileSel" onchange="updatepSelect();" ><option selected value="1">&nbsp;BlueUP (PF1)&nbsp;</option><option  value="2">&nbsp;BluePK (PF2)&nbsp;</option><option  value="3">&nbsp;BlueDN (PF3)&nbsp;</option><option  value="4">&nbsp;Moon (PF4)&nbsp;</option><option  value="5">&nbsp;WhiteUP (PF5)&nbsp;</option><option  value="6">&nbsp;WhitePK (PF6)&nbsp;</option><option  value="7">&nbsp;WhiteDN (PF7)&nbsp;</option><option  value="8">&nbsp;WaveLFT (PF8)&nbsp;</option><option  value="9">&nbsp;WaveRGT (PF9)&nbsp;</option><option  value="10">&nbsp;CalmLFT (PF10)&nbsp;</option><option  value="11">&nbsp;CalmRGT (PF11)&nbsp;</option><option  value="12">&nbsp;Blue20 (PF12)&nbsp;</option><option  value="13">&nbsp;White20 (PF13)&nbsp;</option><option  value="14">&nbsp;Blue30 (PF14)&nbsp;</option><option  value="15">&nbsp;White30 (PF15)&nbsp;</option><option  value="16">&nbsp;Blue40 (PF16)&nbsp;</option><option  value="17">&nbsp;White40 (PF17)&nbsp;</option><option  value="18">&nbsp;Blue50 (PF18)&nbsp;</option><option  value="19">&nbsp;White50 (PF19)&nbsp;</option><option  value="20">&nbsp;Blue60 (PF20)&nbsp;</option><option  value="21">&nbsp;White60 (PF21)&nbsp;</option><option  value="22">&nbsp;Blue70 (PF22)&nbsp;</option><option  value="23">&nbsp;White70 (PF23)&nbsp;</option><option  value="24">&nbsp;Blue80 (PF24)&nbsp;</option><option  value="25">&nbsp;White80 (PF25)&nbsp;</option><option  value="26">&nbsp;Blue90 (PF26)&nbsp;</option><option  value="27">&nbsp;White90 (PF27)&nbsp;</option><option  value="28">&nbsp;Blue100 (PF28)&nbsp;</option><option  value="29">&nbsp;White100 (PF29)&nbsp;</option><option  value="30">&nbsp;PF30 (PF30)&nbsp;</option><option  value="31">&nbsp;PFSDBlue (PF31)&nbsp;</option><option  value="32">&nbsp;PFSDWhit (PF32)&nbsp;</option></select>
    <input name="profileID" id="profileID" type="hidden" value="1">
    <input name="compact" type="hidden" id="compact" value="0">
    </form>
        <form name="pUpdate" method="post" action="/profiles.sht"><table border="1">
            <input name="compact" type="hidden" id="compact" value="0">
            <tr><td><P>Profile Name&nbsp;</td>
            <td><input class="tbflat" name="profileName" size="15" maxlength="25" tabindex="1" value="BlueUP"></td></tr>
            <tr><td>Control Type &nbsp;</td>
            <td><select class="tbflat" name="profileTypeSel" onChange="showLeaf(1, this.options[this.selectedIndex].value)"><option  value="1">&nbsp;Pump&nbsp;</option><option selected value="2">&nbsp;Ramp&nbsp;</option><option  value="3">&nbsp;Vortech&nbsp;</option><option  value="4">&nbsp;Weather&nbsp;</option>
            </select></td></tr>
            <tr><td colspan="2">
4

1 に答える 1