2014-10-31 102 views
0

当使用Eclipse for Java时,我可以从网站访问数据并使用Selenium填写在线表单。我所要做的只是做WebDriver driver = new HtmlUnitDriver();driver.get("wwww.google.com");driver.findElement()。为了做到这一点,我将进入Java Build Path,访问Libraries,然后添加外部JAR文件:selenium-server-standalone-2.39.0.jar使用Android从网络获取数据?

我想为Android做同样的事情,但有困难。我知道有些东西叫做Selenium for Android,但它不再被支持。现在有Selendroid。但是,尽管Eclipse的代码与Java的代码很熟悉(即,SelendroidCapabilities capa = new SelendroidCapabilities("io.selendroid.testapp:0.12.0");,WebDriver driver = new SelendroidDriver(capa);,WebElement inputField = driver.findElement(By.id("my_text_field"));),但我不认为这实际上与我正在寻找的相同。我甚至尝试添加selendroid-standalone-0.12.0-with-dependencies.jar到Android库和所有我回来是这个错误在控制台:

Dx warning: Ignoring InnerClasses attribute for an anonymous inner class 
(org.apache.xalan.lib.sql.SecuritySupport12$8) that doesn't come with an 
associated EnclosingMethod attribute. This class was probably produced by a 
compiler that did not target the modern .class file format. The recommended 
solution is to recompile the class from source, using an up-to-date compiler 
and without specifying any "-target" type options. The consequence of ignoring 
this warning is that reflective operations on this class will incorrectly 
indicate that it is *not* an inner class. 

所以我的问题是:我在哪里可以去了解如何使用Android的去一个网页,检索一些数据(但实际上并没有在屏幕上打开一个网页,这是严格的背景资料)?或者,通过Android使用标识符(如id,nameXpath等)从网站获取数据的步骤是什么?

+0

硒是一种测试套件网站上运行的功能测试。你只是想知道如何在Android应用程序中发出HTTP请求?在这种情况下,我建议查看图书馆RoboSpice(https://github.com/stephanenicolas/robospice)与Google HTTP Client的组合,以获得可靠的异步网络请求。 – darnmason 2014-10-31 15:14:37

+0

谢谢,但我不认为这是我正在寻找的。 – user2323030 2014-10-31 23:05:53

回答

0

我终于找到了正是我想要的东西:HtmlCleaner。有一个很好的指导here

下载JAR文件here并将其包含在项目的库中。

然后使用下面的代码从XPath的让你的元素:

public class Main extends Activity { 

    // HTML page 
    static final String URL = "https://www.yourpage.com/"; 
    // XPath query 
    static final String XPATH = "//some/path/here"; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     // init view layout 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     // decide output 
     String value = getData(); 
    } 

    public String getData() { 
     String data = ""; 

     // config cleaner properties 
     HtmlCleaner htmlCleaner = new HtmlCleaner(); 
     CleanerProperties props = htmlCleaner.getProperties(); 
     props.setAllowHtmlInsideAttributes(false); 
     props.setAllowMultiWordAttributes(true); 
     props.setRecognizeUnicodeChars(true); 
     props.setOmitComments(true); 

     // create URL object 
     URL url = new URL(URL); 
     // get HTML page root node 
     TagNode root = htmlCleaner.clean(url); 

     // query XPath 
     Object[] statsNode = root.evaluateXPath(XPATH); 
     // process data if found any node 
     if(statsNode.length > 0) { 
      // I already know there's only one node, so pick index at 0. 
      TagNode resultNode = (TagNode)statsNode[0]; 
      // get text data from HTML node 
      stats = resultNode.getText().toString(); 
     } 

     // return value 
     return data; 
    } 
} 
0

使用JSOUP为相同。我认为这就是你要说的。

jsoup是一个用于处理真实世界HTML的Java库。它提供了一个非常方便的API来提取和操作数据,使用最好的DOM,CSS和类似jquery的方法。

下载jar包含在项目中。

简单的例子:

Document doc = Jsoup.connect("http://example.com/").get(); 
String title = doc.title(); 

阅读apidocs获取更多信息。

此外请确保将网络调用放在AsyncTask中,而不是在主UI线程上。

+0

是的。这是我正在寻找的,谢谢。但是,您能推荐一款能够处理XPath的软件吗?它看起来像JSOUP不支持。 – user2323030 2014-10-31 23:05:00

+0

你可以使用xsoup - https://github.com/code4craft/xsoup(虽然从来没有对它做过工作,但我认为它只是基于jsoup构建),并且必须非常易于使用。也通过这个链接http://stackoverflow.com/questions/16335820/convert-xpath-to-jsoup-query。标记和正确,如果它帮助你,好日子^。^ – 2014-11-01 06:58:41

+0

谢谢你的帮助!但是我发现了一些更适合我的需求的东西:HtmlCleaner。 :) – user2323030 2014-11-02 03:23:01