我很难弄清楚如何使用Java在互联网上自动执行任务。问题在于,当我搜索这个时,我通常最终找到了诸如Selenium等API之类的链接。但我想浏览没有任何图形的网站,而不记录我正在做的事情(我想在代码中完成所有操作)。对于那些过去在场的人来说,我希望自动化网页浏览非常类似于使用Lynx浏览互联网。
例如,假设我去了Google,我希望能够以某种方式返回搜索栏,然后将文本设置为特定的内容。然后,我想要获取搜索按钮并将其状态更改为按下。然后我希望能够完成结果。
所以这里有一些虚拟代码解释了我希望能做什么:
ExampleClass eClass = new ExampleClass("www.google.com");
//The search button is the 5th component
InternetButton button = (InternetButton)eClass.getComponent(5);
//Text Field is 2nd component
InternetTextField textField = (InternetTextField)eClass.getComponent(2);
textField.setText("stack overflow");
button.setPressed(true);
这会在Google上搜索堆栈溢出,然后我会查看结果。
我一直在搜索和搜索,但找不到任何东西。我正在寻找更多关于我想要做的教程或示例。如果假设Java SDK可能包含我需要执行此操作的所有内容,但我似乎无法找到有关该主题的任何帮助。我可能只是在寻找错误的关键词。
如果有人可以提供任何建议,我们将不胜感激。如果我只是在寻找错误的东西,而且你是一个比我更好的Google员工,请发布它。
我已经尝试了一些HttpURLConnection,HttpsURLConnection,URLConnection等,但是如果没有示例或教程,从头开始编写它是非常复杂的。我可以抓住这些文件,但不能通过网站进行操作。
答案 0 :(得分:4)
我会选择HtmlUnit
HtmlUnit是“用于Java程序的GUI-Less浏览器”。它模拟HTML文档,并提供一个API,允许您调用页面,填写表单,单击链接等...就像在“普通”浏览器中一样。
example taken from their page接近你想做的事情
@Test
public void submittingForm() throws Exception {
final WebClient webClient = new WebClient();
// Get the first page
final HtmlPage page1 = webClient.getPage("http://some_url");
// Get the form that we are dealing with and within that form,
// find the submit button and the field that we want to change.
final HtmlForm form = page1.getFormByName("myform");
final HtmlSubmitInput button = form.getInputByName("submitbutton");
final HtmlTextInput textField = form.getInputByName("userid");
// Change the value of the text field
textField.setValueAttribute("root");
// Now submit the form by clicking the button and get back the second page.
final HtmlPage page2 = button.click();
webClient.closeAllWindows();
}
答案 1 :(得分:2)
我还没试过,但你可以查看jsoup:
jsoup是一个用于处理真实HTML的Java库。它提供了一个非常方便的API,用于提取和操作数据,使用最好的DOM,CSS和类似jquery的方法。