[英]Exception using selenium on server side
我有一个Web应用程序,要求用户输入URL。 然后,我使用Selenium 2.35.0从URL获取源代码。
我已经创建了一个dynamic web project
并正确设置了所有内容(包括所有硒罐),但是我的应用程序抛出异常
Oct 18, 2013 2:49:48 PM org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet [DiffReportServlet] in context with path [/PBSkyScraper] threw exception [Servlet execution threw an exception] with root cause
java.lang.ClassNotFoundException: org.openqa.selenium.WebDriver
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1714)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1559)
at com.PB.automation.servlets.DiffReportServlet.doGet(DiffReportServlet.java:38)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:953)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1023)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:312)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:895)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:918)
at java.lang.Thread.run(Thread.java:680)
这就是工作流程:
用户输入URL并提交。 调用一个servlet,它实际上负责获取源代码。 我无法理解原因,因为如果我尝试将其作为Java应用程序而不是在服务器上运行,则可以正常工作。
这是代码
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String webDir = request.getServletContext().getRealPath("/WebContent");
String url = request.getParameter("url");
ApplicationUtils.getHTMLSourceFromURL(url, "originalSource.html");
}
public static void getHTMLSourceFromURL(String url, String originalFile) {
WebDriver driver = new FirefoxDriver();
driver.get(url);
try {
Thread.sleep(5000);
List<String> pageSource = new ArrayList<String>(Arrays.asList(driver.getPageSource().split("\n")));
writeTextToFile(pageSource, originalFile);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("quitting webdriver");
driver.quit();
}
有人可以解释原因并为此提供解决方案吗? 我正在使用Tomcat作为服务器。
探索了这个答案后,我终于完成了自己的工作。 我刚刚删除了独立的jar,并使用selenium-java-2.35.0.jar
将lib文件夹移至WEB-INF
目录,并且一切正常。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.