Java和HTMLUnit:如何点击提交按钮?

我是Java的新手,需要编写各种java应用程序来进行Web抓取和网页交互。 我开始使用Selenium,但因为它直接与浏览器交互,所以我的使用不实用。 我需要执行以下任务:1。转到特定URL 2.在输入字段中输入邮政编码3.单击“提交”按钮4.解析并保存特定div标签或重新查询页面的结果。 我正在使用HTMLUnit和Eclipse。 我可以通过引用表单然后输入名称来访问网页并在输入中输入post代码。 但是,当我尝试单击提交按钮时,我收到ElementNotFoundException错误。 以下是如何在页面上实现提交按钮的示例: type =“submit”value =“submit”name =“submit”>输入邮政编码 这是我的代码的样子: package htmlunittest; import java.io.IOException; import java.net.URL; import junit.framework.TestCase; import com.gargoylesoftware.htmlunit.BrowserVersion; import com.gargoylesoftware.htmlunit.Page; import com.gargoylesoftware.htmlunit.RefreshHandler; import com.gargoylesoftware.htmlunit.WebClient; import com.gargoylesoftware.htmlunit.html.HtmlDivision; import com.gargoylesoftware.htmlunit.html.HtmlButtonInput; import com.gargoylesoftware.htmlunit.html.HtmlForm; import com.gargoylesoftware.htmlunit.html.HtmlImage; import com.gargoylesoftware.htmlunit.html.HtmlInput; import com.gargoylesoftware.htmlunit.html.HtmlPage; import com.gargoylesoftware.htmlunit.html.HtmlSubmitInput; import com.gargoylesoftware.htmlunit.html.HtmlTextInput; public class htmlunittest extends TestCase{ @SuppressWarnings(“deprecation”) public static void main(String[] […]

如何将JavaPairRDD转换为数据集?

SparkSession.createDataset()只允许List, RDD, or Seq – 但它不支持JavaPairRDD 。 因此,如果我有一个我想要创建Dataset的JavaPairRDD ,那么SparkSession.createDataset()限制的可行工作区SparkSession.createDataset()可以创建包含两个字段的包装器UserMap类: String和User 。 然后执行spark.createDataset(userMap, Encoders.bean(UserMap.class)); ?

Java3d读取3d对象的每个多边形

我正在使用Java3d( VERSION 1.6 ),我试图从任何对象读取所有多边形。 我使用以下代码加载了一个对象: private BranchGroup loadObj(String p) { BranchGroup objRoot = new BranchGroup(); TransformGroup tg = new TransformGroup(); Transform3D t3d = new Transform3D(); t3d.setScale(0.3); Matrix4d matrix = new Matrix4d(); t3d.get(matrix); try { Scene s = null; ObjectFile f = new ObjectFile (); String basepath = new File(p).getAbsolutePath(); System.out.println(basepath); f.setBasePath(basepath); f.setFlags (0); s = […]

将“路径”从2Darrays网格存储到列表中

在我用JLabel制作的2D网格作为单元格时,我让单元格的邻居形成一个“路径”,然后在该路径之后绘制一个多边形,其中单元格的中心为点。 我使用一个分层窗格(JPanel)将两个面板一个放在另一个上面以便能够绘制多边形和一个GridBagLayout以允许将两个组件一个放在另一个上面。 一切都按预期工作。 问题是,每当我点击一个空单元格时,前一条路径就会被清除,同时也会清除多边形。 但是不清除单元格内容。 现在,我希望将已绘制的路径/多边形保存在列表中,以便可以再次重新绘制它们。 我希望有一个类似“历史”的东西,它将包含所有找到的路径。 有关如何实现这一点的任何想法? 在路径之后绘制的多边形由位于该路径中包含的单元格中心的点(JLabel)形成: Point[] polygon = new Point[path.size()]; //calculate points to construct lines along the path for(int[] address : path) { //get cell location (row / col) int row = address[0]; int col = address[1]; //get label in that location JLabel label = grid[row][col]; //add center of label as […]

SignalR Android访问localhost

出于某种原因,我不能让make android app连接到我的服务器(在localhost上) 问题是(可能)不在代码中,完全相同的代码在简单的Java应用程序中运行良好 我得到一个InvalidHttpStatusCodeException 错误请求 – 无效主机名HTTP错误400.请求主机名无效。 我尝试使用另一个模拟器,Genymotion(我将IP更改为http://192.168.56.1 ……) java.util.concurrent.ExecutionException:microsoft.aspnet.signalr.client.transport.NegotiationException:与服务器协商时出现问题 我在第76行的HttpClienTransport.java中得到了这个例外 @Override public SignalRFuture negotiate(final ConnectionBase connection) { log(“Start the negotiation with the server”, LogLevel.Information); String url = connection.getUrl() + “negotiate” + TransportHelper.getNegotiateQueryString(connection); Request get = new Request(Constants.HTTP_GET); get.setUrl(url); get.setVerb(Constants.HTTP_GET); connection.prepareRequest(get); final SignalRFuture negotiationFuture = new SignalRFuture(); log(“Execute the request”, LogLevel.Verbose); HttpConnectionFuture connectionFuture = […]

Spring框架:HTTP OPTIONS返回所有METHODS(get,put,post,delete,trace,head,options)

我写了一个spring web应用程序。 除了一件事,它非常可靠。 应用程序返回HTTP OPTIONS请求,其响应为“允许:GET,HEAD,POST,PUT,DELETE,OPTIONS”,但这不是真的,只允许GET和POST。 其他操作(GET和POST除外)返回“操作不受支持”错误405和服务器名称和版本…等。 安全团队不喜欢使用“不支持”错误消息返回服务器的所有详细信息。 我花了很多时间试图覆盖该错误页面或为405引入自定义错误页面……但我没有成功。 我整天都在尝试禁用HTTP OPTIONS。 没有成功。 还有一个细节,我运行curl语句来测试: curl “http://localhost:8080/webappX/welcome.htm” -X PUT -v 我的应用程序返回: HTTP Status 405 – Request method ‘PUT’ not supported Tomcat/6.0…etc 由于此数据(tomcat版本,服务器信息和响应元数据)可能用于安全攻击,如何创建隐藏我的服务器详细信息并提供非常小的错误页面的自定义405页面? 或者我如何禁用PUT,DELETE,TRACE,OPTIONS,HEAD以便tomcat可能只是忽略它们或者不提供有关我的服务器的内部信息。 谢谢

Spring @Secured和@PreAuthorize对普通(非Web)应用程序没有任何影响

我用两个安全的方法创建了一个Application Spring组件: @Component public class Application { public void run() { onlyAdminMethod(); onlyAdminMethod2(); } @Secured( “ROLE_ADMIN” ) public void onlyAdminMethod() { System.out.println( “Admin-only method called” ); } @PreAuthorize( “hasRole(‘ROLE_ADMIN’)” ) public void onlyAdminMethod2() { System.out.println( “Admin-only method 2 called” ); } } 我在该bean上调用run()方法,我从Spring XML上下文中获取: ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(“applicationContext.xml”); context.getBean( Application.class).run(); 没有发生 –即使没有身份validation和SecurityContextHolder.getContext().getAuthentication() 方法也会正常调用 SecurityContextHolder.getContext().getAuthentication()返回null […]

如果validation失败,如何在validation阶段阶段后检入?

我编写了一个PhaseListener ,我在其中检查Validations阶段。 有没有办法可以在监听器的afterPhase()方法中检查validation失败,validation阶段之后的下一阶段将是渲染响应阶段。

获取不同类型的JSON响应Retrofit

我有REST api,它根据当前状态在同一路径上做出响应。 让我们假设/api/users响应 { “status”:200, “error”:false, “users”:[“a”,”b”] } 如果用户被授权。 否则,如果用户未获得授权,则以{“status”:403,”error”:true,”redirect”:”url”}响应。 使用Retrofit为api调用定义Interface时,它需要确切类型的响应对象。 例如: @GET(“users”) Call<List> getUsers() 但是这里API服务器响应不同形状的对象。 如何处理这种情况?

使用Java(OSX)在终端中调用命令

我正在尝试编写Java代码来运行wget以从服务器检索图像 我相信我已经正确安装了。 如果我输入: wget http://sofzh.miximages.com/java/insitu38795.jpg 我在用户帐户文件夹中找到了该图像。 以下Java代码在Ubuntu上正常运行,但我不得不将项目移至OSX(Mountain Lion) import java.io.*; import java.io.IOException; public class runWget { public static void main (String args[]) { String whatToRun = “wget http://sofzh.miximages.com/java/insitu38795.jpg”; try { Runtime rt = Runtime.getRuntime(); Process proc = rt.exec(whatToRun); int exitVal = proc.waitFor(); System.out.println(“Process exitValue:” + exitVal); } catch (Throwable t) { t.printStackTrace(); } } } […]