Gay*_*tti 13 selenium android web-scraping selendroid
我打算创建一个Android应用程序,执行无头登录网站,然后从后续页面抓取一些内容,同时保持登录会话.
我首先在普通的Java项目中使用了HtmlUnit,它运行得很好.但后来发现HtmlUnit与Android不兼容.
然后我通过向登录表单发送HTTP"POST"请求来尝试JSoup库.但由于JSoup不支持JavaScript,因此生成的页面不会完全加载.
然后我建议看看Selendroid,它实际上是一个android测试自动化框架.但我真正需要的是一个支持JavaScript和Android的Html解析器.我发现Selendroid很难理解哪些我甚至无法弄清楚要使用哪些依赖项.
使用Selenium WebDriver,代码将如下所示.但有人可以向我展示一个类似Selendroid的代码示例吗?
WebDriver driver = new FirefoxDriver();
driver.get("https://mail.google.com/");
driver.findElement(By.id("email")).sendKeys(myEmail);
driver.findElement(By.id("pass")).sendKeys(pass);
// Click on 'Sign In' button
driver.findElement(By.id("signIn")).click();
Run Code Online (Sandbox Code Playgroud)
并且,
不幸的是我没有让 Selendroid 工作。但我找到了一种解决方法,只需使用 Android 内置的启用 JavaScript 的 WebView 来抓取动态内容。
mWebView = new WebView();
mWebView.getSettings().setJavaScriptEnabled(true);
mWebView.addJavascriptInterface(new HtmlHandler(), "HtmlHandler");
mWebView.setWebViewClient(new WebViewClient() {
@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
if (url == urlToLoad) {
// Pass html source to the HtmlHandler
WebView.loadUrl("javascript:HtmlHandler.handleHtml(document.documentElement.outerHTML);");
}
});
Run Code Online (Sandbox Code Playgroud)
JS 方法document.documentElement.outerHTML将检索加载的 url 中包含的完整 html。然后将检索到的html字符串发送到HtmlHandler类中的handleHtml方法。
class HtmlHandler {
@JavascriptInterface
@SuppressWarnings("unused")
public void handleHtml(String html) {
// scrape the content here
}
}
Run Code Online (Sandbox Code Playgroud)
您可以使用像 Jsoup 这样的库从 html 字符串中抓取必要的内容。
| 归档时间: |
|
| 查看次数: |
2416 次 |
| 最近记录: |