- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
//下面的代码连续访问网页。这次我们得到了java.util.ConcurrentModificationException 在 java.util.ArrayList$Itr.checkForCommodification(ArrayList.java:782) 在 java.util.ArrayList$Itr.remove(ArrayList.java:768) 在 com.gargoylesoftware.htmlunit.WebWindowImpl.destroyChildren(WebWindowImpl.java:185) 在 com.gargoylesoftware.htmlunit.WebWindowImpl.setEnclosurePage(WebWindowImpl.java:110) 在 com.gargoylesoftware.htmlunit.html.HTMLParser.parse(HTMLParser.java:209) 在 com.gargoylesoftware.htmlunit.html.HTMLParser.parseHtml(HTMLParser.java:187) 在 com.gargoylesoftware.htmlunit.DefaultPageCreator.createHtmlPage(DefaultPageCreator.java:268) 在 com.gargoylesoftware.htmlunit.DefaultPageCreator.createPage(DefaultPageCreator.java:156) 在 com.gargoylesoftware.htmlunit.WebClient.loadWebResponseInto(WebClient.java:434) 在 com.gargoylesoftware.htmlunit.WebClient.getPage(WebClient.java:309) 在 com.gargoylesoftware.htmlunit.WebClient.getPage(WebClient.java:374) 在 com.gargoylesoftware.htmlunit.WebClient.getPage(WebClient.java:359) 在sample.ShareScraper.getHtmlPage(ShareScraper.java:303) 在sample.ShareScraper.GetData(ShareScraper.java:116) getHtmlPage方法中出现异常。
package sample;
import java.io.IOException;
import java.net.MalformedURLException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.ConcurrentModificationException;
import java.util.Vector;
import com.gargoylesoftware.htmlunit.FailingHttpStatusCodeException;
import com.gargoylesoftware.htmlunit.NicelyResynchronizingAjaxController;
import com.gargoylesoftware.htmlunit.WebClient;
import com.gargoylesoftware.htmlunit.html.HtmlPage;
import com.gargoylesoftware.htmlunit.html.HtmlTableDataCell;
import com.jls.library.JLStructure;
public class ShareScraper {
private WebClient wc1,wc2,wc3,wc4,wc5;
private JLStructure JLSObj = null;
HtmlPage details_page1 = null , details_page2 = null , details_page3 = null , details_page4 = null , details_page5 = null;
//Object[] share_values = null;
Vector<String> share_values = null;
public void GetData() {
System.out.println("it is getdata method");
// TODO Auto-generated method stub
JLSObj = new JLStructure();
HtmlPage homePage = null;
String[] share_codes1 = null , share_codes2 = null , share_codes3 = null , share_codes4 = null , share_codes5 = null;
try{
wc1 = new WebClient();
wc1.getOptions().setUseInsecureSSL(true);
wc1.getOptions().setJavaScriptEnabled(true);
wc1.getOptions().setCssEnabled(true);
wc1.getOptions().setThrowExceptionOnScriptError(false);
wc1.getOptions().setThrowExceptionOnFailingStatusCode(false);
wc1.setAjaxController(new NicelyResynchronizingAjaxController());
java.util.logging.Logger.getLogger("com.gargoylesoftware.htmlunit").setLevel(java.util.logging.Level.OFF);
java.util.logging.Logger.getLogger("org.apache.http").setLevel(java.util.logging.Level.OFF);
homePage = wc1.getPage("http://www.google.com/finance");
share_codes1 = new String[]{"NSE:UNITECH" , "NSE:RENUKA" , "NSE:DISHMAN" , "NSE:TATASTEEL" , "NSE:TATAMOTORS" , "NSE:NECLIFE" , "NSE:RAIN" , "NSE:ORIENTCEM" , "NSE:JSWSTEEL" , "NSE:JINDALSTEL"};
for (int share_code_no = 0; share_code_no < share_codes1.length; share_code_no++) {
String ei = homePage.getAnchorByText("Finance").getHrefAttribute();
ei = JLSObj.matchData("(?<=\\?ei=).*", ei);
details_page1 = getHtmlPage("http://www.google.com/finance?q="+share_codes1[share_code_no]+"&ei="+ei , wc1 , 1);
System.out.println(share_codes1[share_code_no]);
}
System.out.println("finished");
}catch(Exception e){
e.printStackTrace();
}
}
public Vector<String> GetShareValues(){
System.out.println("it is get sharae value method");
String NSE_UNITECH = null , NSE_BAJAJHIND = null , NSE_RENUKA = null , NSE_DISHMAN = null , NSE_TATASTEEL = null , NSE_TATAMOTORS = null , NSE_RAIN = null, NSE_ORIENTCEM = null , NSE_JSWSTEEL = null ;
try{
synchronized(this){
details_page1 = (HtmlPage) details_page1.refresh();
}
NSE_UNITECH = GetTableDataCellText("NSE:UNITECH",details_page1);
if (NSE_UNITECH == ""){
details_page1 = null ; details_page2 = null ; details_page3 = null ; details_page4 = null ; details_page5 = null ; wc1 = null ; wc2 = null ; wc3 = null ; wc4 = null ; wc5 = null;
System.out.println("page is destroyed again getdata is called");
System.gc();
GetData();
}
//"NSE:UNITECH" , "NSE:RENUKA" , "NSE:DISHMAN" , "NSE:TATASTEEL" , "NSE:TATAMOTORS" , "NSE:NECLIFE" , "NSE:RAIN" , "NSE:ORIENTCEM" , "NSE:JSWSTEEL" , "NSE:JINDALSTEL"
//"UNITECH" , "RENUKA" , "DISHMAN" , "TATASTEEL" , "TATAMOTORS" , "RAIN" , "ORIENTCEM" , "JSWSTEEL" , "JINDALSTEL" ,
NSE_UNITECH = GetTableDataCellText("NSE:UNITECH",details_page1);
NSE_RENUKA = GetTableDataCellText("NSE:RENUKA",details_page1);
NSE_DISHMAN = GetTableDataCellText("NSE:DISHMAN",details_page1);
NSE_TATASTEEL = GetTableDataCellText("NSE:TATASTEEL",details_page1);
NSE_TATAMOTORS = GetTableDataCellText("NSE:TATAMOTORS",details_page1);
NSE_RAIN = GetTableDataCellText("NSE:RAIN",details_page1);
NSE_ORIENTCEM = GetTableDataCellText("NSE:ORIENTCEM",details_page1);
NSE_JSWSTEEL = GetTableDataCellText("NSE:JSWSTEEL",details_page1);
NSE_JINDALSTEL = GetTableDataCellText("NSE:JINDALSTEL",details_page1);
share_values = new Vector<String>();
String timeStamp = new SimpleDateFormat("dd-MM-yyyy HH:mm:ss").format(Calendar.getInstance().getTime());
share_values.add(timeStamp);
System.out.println("Now time is :"+timeStamp);
//"UNITECH" , "RENUKA" , "DISHMAN" , "TATASTEEL" , "TATAMOTORS" , "RAIN" , "ORIENTCEM" , "JSWSTEEL" , "JINDALSTEL" ,
share_values.add("UNITECH :"+NSE_UNITECH);
share_values.add("RENUKA :"+NSE_RENUKA);
share_values.add("DISHMAN :"+NSE_DISHMAN);
share_values.add("TATASTEEL :"+NSE_TATASTEEL);
share_values.add("TATAMOTORS :"+NSE_TATAMOTORS);
share_values.add("RAIN :"+NSE_RAIN);
share_values.add("ORIENTCEM :"+NSE_ORIENTCEM);
share_values.add("JSWSTEEL :"+NSE_JSWSTEEL);
share_values.add("JINDALSTEL :"+NSE_JINDALSTEL);
//websitevpn.com
//freevpn
}catch(Exception e){
e.printStackTrace();
}
return share_values;
}
private String GetTableDataCellText(String param , HtmlPage data_page) throws IOException{
String result = null;
HtmlTableDataCell span = null;
HtmlPage data = null;
if (data_page!=null){
data = data_page;
}
else{
data = details_page1;
}
span = ((HtmlTableDataCell) data.getFirstByXPath("//td[preceding-sibling::td[a[contains(@title ,'"+param+"')]]]"));
if (span!= null){
result = span.asText();
}else{
result = "";
}
return result;
}
public synchronized HtmlPage getHtmlPage(String url , WebClient webClient , int count) {
HtmlPage result_page = null;
try {
result_page = webClient.getPage(url);
} catch (FailingHttpStatusCodeException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}catch (ConcurrentModificationException e) {
// TODO Auto-generated catch block
try {
Thread.sleep(10000);
if (count <= 6){
getHtmlPage (url , webClient , count++);
}
} catch (InterruptedException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
e.printStackTrace();
}
return result_page;
}
}
最佳答案
WebClient 不是线程安全的,请参阅此处:
http://htmlunit.sourceforge.net/apidocs/com/gargoylesoftware/htmlunit/WebClient.html
关于htmlunit 上的 java.util.ConcurrentModificationException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26624455/
htmlunit 报告从 css 到页面上解析错误的所有内容。 这个怎么静音?? 最佳答案 把这些放在声明 webClient 之后 webClient.setCssError
可能显示 Javascript 测试支持 package htmlunitpoc; import com.gargoylesoftware.htmlunit.WebClient; import co
我正在尝试使用 HtmlUnit 登录到我的本地 wordpress 网站,但它似乎存在 cookie 问题。 那是代码的开头: WebClient webClient = new WebClient
有什么办法可以在 HtmlUnit 中使用 session 更改 url? 我的情况如下所示, 登录 http://test.raja.com与凭据。 获取页面http://home.raja.com
我有以下代码: WebClient webClient = new WebClient(); HtmlPage page = webClient.getPage("http://www.myland.
我研究过htmlunit、httpunit、jwebunit、selenium等ui测试工具。 我对测试工具不是很熟悉。 Htmlunit 在 javascript 支持方面听起来是个不错的选择。然后
我拥有的页面对象是 click() 长链的结果调用(以防万一您想知道如何在不知道用于获取它的 URL 的情况下拥有一个页面对象)。 方法HtmlPage.getDocumentURI未实现。 Html
这是我要抓取的页面:https://www.tokopedia.com/berkahcell2/promo-termurah-vr-virtual-reality-box-v-2-0-remote-b
关闭。这个问题是off-topic .它目前不接受答案。 想改进这个问题吗? Update the question所以它是on-topic用于堆栈溢出。 关闭 10 年前。 Improve thi
我的站点结构看起来像这样: Item 1 Desc 1
我的代码是这样的: WebClient webClient = new WebClient(BrowserVersion.CHROME); webClient.setAjaxController(ne
我只希望页面的文本内容,并且希望抓取尽可能轻巧。我可以关闭HTMLUnit开箱即用的所有JavaScript和CSS以及其他外部内容的解析和其他加载功能吗? 最佳答案 我认为与您正在寻找的最接近的东西
我有一个提交按钮,但无法点击.. Send SMS 我已经尝试过这个: page = (HtmlPage) form.getInputByValue("Send SMS").click()
我使用 HtmlUnit 对我的网站进行自动化测试。我的网站使用 gmaps api - 发送外部网站请求需要花费大量时间(我有数百次测试和数千次页面加载)。 我需要一些方法来告诉 HtmlUnit
我使用 HtmlUnit 对我的网站进行自动化测试。我的网站使用 gmaps api - 发送外部网站请求需要花费大量时间(我有数百次测试和数千次页面加载)。 我需要一些方法来告诉 HtmlUnit
我正在使用 HtmlUnit 加载一个充满 JavaScript 的网页。 WebClient 可以很好地执行 JavaScript。 但是,当我单击调用 Ajax 调用的特定表单上的按钮时,即使调用
我正在尝试使用 HtmlUnit 登录 Facebook 页面并查看其 HTML 内容。我正在尝试通过 HtmlUnit 填写登录凭据,但在单击提交按钮时我没有看到正在执行的 session 。 在
Hy...我想使用 HtmlUnit 登录到一些 3rd 方网站。但是 HtmlUnit 应该能够告诉我对输入站点的登录尝试是否成功。有什么办法可以使用 HtmlUnit 执行此任务。请帮忙 ..!!
我正在从 selenium-1 升级到 selenium-2 并尝试新的 HtmlUnit 驱动程序。我已经尝试了一些基本的测试(打开一个页面,get_text,..),它似乎 极慢(我认为 chro
我正在使用 HTMLUnit。我正在访问页面,但是特殊(马耳他)字符显示错误。例如,ġuvni 显示为 ?uvni HtmlPage page = submit_button.click(); Sys
我是一名优秀的程序员,十分优秀!