我打算创建一个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();
还有,
我建议您使用WebDrivero,因为您想使用Javascript。它使用NodeJs,因此很容易需要其他插件来删除HTML。
Appium也是一种选择,但它更关注前端测试。
我从来没有使用过Selendroid
,所以我不太确定,但通过网络搜索我找到了这个例子,根据它,我认为您从Selenium
到Selendroid
的代码翻译应该是:
翻译代码(在我看来)
public class MobileWebTest {
private SelendroidLauncher selendroidServer = null;
private WebDriver driver = null;
@Test
public void doTest() {
driver.get("https://mail.google.com/");
WebElement email = driver.findElement(By.id("email")).sendKeys(myEmail);
WebElement password = driver.findElement(By.id("pass")).sendKeys(pass);
WebElement button = driver.findElement(By.id("signIn")).click();
driver.quit();
}
@Before
public void startSelendroidServer() throws Exception {
if (selendroidServer != null) {
selendroidServer.stopSelendroid();
}
SelendroidConfiguration config = new SelendroidConfiguration();
selendroidServer = new SelendroidLauncher(config);
selendroidServer.launchSelendroid();
DesiredCapabilities caps = SelendroidCapabilities.android();
driver = new SelendroidDriver(caps);
}
@After
public void stopSelendroidServer() {
if (driver != null) {
driver.quit();
}
if (selendroidServer != null) {
selendroidServer.stopSelendroid();
}
}
}
你有什么要添加到你的项目
似乎您必须将Selendroid独立jar文件添加到您的项目中。如果你对如何在Android项目中添加外部JAR有疑问,你可以看到这个问题:如何在Android项目中使用外部JAR?
您可以在这里下载jar文件
:jar文件
此外,似乎仅仅将jar文件
添加到项目中是不够的。您也应该添加您所拥有的独立版本的selendroid-Client jar文件。
您可以从这里下载:clientjar文件
期待对你有所帮助!
不幸的是,我没有让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);");
}
});
JS方法document.documentElement.outer超文本标记语言
将检索加载的url中包含的完整html。然后将检索的html字符串发送到HtmlHandler类中的handleHtml方法。
class HtmlHandler {
@JavascriptInterface
@SuppressWarnings("unused")
public void handleHtml(String html) {
// scrape the content here
}
}
您可以使用像Jsoup这样的库从html字符串中提取必要的内容。
Selendroid 是一个 Android 原生应用的 UI 自动化测试框架。测试使用 Selenium 2 客户端 API 编写。 Selendroid 可在仿真器和真实设备上运行,可集成 Node.js 到 Selenium Grid 实现伸缩性和并行测试。 示例代码: driver = new AndroidDriver(new URL("http://localhost:8080/wd/
我对python有点陌生,但我正在尝试制作一个web scraper脚本,它可以在网站上下载所有图片。我正在使用requests和PyQuery,因为许多人在做了一些研究后推荐了它。这就是我现在所拥有的,我不知道该去哪里。 我知道我需要获取img的来源,但在找到img标签后如何做到这一点?此外,我查看了一些htmls的页面源,一些图片存储在他们的数据库中,因此src以“/”开头一些扩展“所以我想知
实现一个刮刮乐的刮奖效果。即用手指滑动刮奖区,会刮去上面一层视图,显示下面一层视图的内容。 [Code4App.com]
问题内容: Golang网络抓取工具需要从经过NTLM认证的网页中提取信息。 拥有有效的用户名和密码后,网络抓取工具如何与服务器执行NTLM 4向握手,以获取对后面受保护网页的访问权限? 问题答案: 您可以在开始抓取之前使用类似身份验证的包。
我正在从一个站点上刮取数据,每个项目都有一个相关的文档URL。我想从那个文件中刮数据,这是可用的HTML格式后点击链接。现在,我一直在使用Google Sheets导入feed来填充基本列。 有没有下一步,我可以做的,进入每个相应的URL并从文档中抓取元素,并用它们填充Google表单?我之所以使用RSS提要(而不是python和BS)是因为它们实际上提供了一个RSS提要。 我找过了,没有找到一个