0

HtmlUnit を使用して Web ページからデータを取得しています。Web ページには、同じように見え、同じ src 値を持つ複数の画像がありますが、それぞれに異なる onclick イベントがあり、どの画像がクリックされたかに応じて新しいページに誘導され、データを保存する必要があるのはこの新しいページです。から。onclick イベントの結果を取得するには、画像をループして各画像をクリックする必要があります。現時点では、私が持っているコードは画像をループしていますが、各ファイルには最初の画像の onclick からの出力が含まれています。誰かが私が何か欠けているところを指摘できますか? 私のコードは次のとおりです。ファイル名の customer は、コードの前半で宣言した変数であり、ループごとに変更して、各ファイルに異なる名前を付けます。

DomNodeList<DomElement> iterable2 = page.getElementsByTagName("img");
                       Iterator<DomElement> i3 = iterable2.iterator();
                       int i = 0;
                       while(i3.hasNext())
                       {
                           HtmlElement element1 = null;
                            DomElement anElement = i3.next();
                            if(anElement instanceof HtmlImage)
                            {
                                 HtmlImage input = (HtmlImage) anElement;
                                 if(input.getSrcAttribute().equalsIgnoreCase("customise.gif") )
                                 {
                                      element1 = input;
                                      page2 = element1.click();
                                     webClient.waitForBackgroundJavaScript(30000);
                                     String result = page2.asText();
                                     try {
                                         BufferedWriter out = new BufferedWriter(new FileWriter("Filepath//"+customer+i+".txt"));

                                       out.write(result);
                                       out.close();
                                       } 
                                       catch (IOException e) 
                                       { 
                                       System.out.println("Exception ");

                                       }
                                    i++;
                                 }
                            }

                       }
4

1 に答える 1

1

ここで見つけることができるHtmlUnitサイトで同様の問題に対して投稿されたソリューションを使用して、これを機能させましたhttp://htmlunit.10904.n7.nabble.com/Problem-in-clicking-multiple-javaScript-links-on-a -page-td22682.html

リンクのスレッドの最終投稿でソリューションを使用すると、私のコードは次のようになります。

                   page = link3.click();
                   // Added the following line of code
                   Object page1Script  = page.getEnclosingWindow().getScriptObject(); 

                   HtmlPage page2 = null;
                   Iterable<DomElement> iterable2 = page.getElementsByTagName("img");
                   Iterator<DomElement> i3 = iterable2.iterator();
                   int i = 0;
                   while(i3.hasNext())
                   {
                       // Added the following two lines of code
                       page.getEnclosingWindow().setEnclosedPage(page); 
                       page.getEnclosingWindow().setScriptObject(page1Script);

                       HtmlElement element1 = null;
                       page2 = null;
                        DomElement anElement = i3.next();
                        if(anElement instanceof HtmlImage)
                        {
                             HtmlImage input = (HtmlImage) anElement;
                             if(input.getSrcAttribute().equalsIgnoreCase("customize.gif") )
                             {
                                 element1 = input;
                                 page2 = element1.click();
                                 webClient.waitForBackgroundJavaScript(30000);
                                 String result = page2.asText();
                                 try {
                                     BufferedWriter out = new BufferedWriter(new FileWriter("Filepath\\"+customer+i+".txt"));


                                   out.write(result);
                                   out.close();
                                   } 
                                   catch (IOException e) 
                                   { 
                                   System.out.println("Exception ");

                                   }
                                i++;
                             }
                        }

                   }
于 2013-05-08T15:03:27.830 に答える