Selenium Wire 日志为空

3
我们最近将项目改为更加模块化。
我们使用selenium和jbrowserdriver从页面上爬取数据。
我们使用Spring Boot和Tomcat。
以前,我们有一个单独的war文件,其中包含所有的类文件,并将其部署到Tomcat中。我们使用jbrowserdriver和wire日志来捕获会话期间的头信息,效果很好。
然而,现在我们已经分离出一些功能,似乎在Tomcat中出现了不同的类加载器问题。
我们的系统布局如下:
/companyDir
+ -- /libs
| + -- core.jar
| + -- /widgets
| | + -- widgetA.jar
| | + -- widgetB.jar

Tomcat被配置为在其shared.loader属性中包括/libs/*.jar和/libs/widgets/*.jar这些jar文件。这些jar文件在tomcat启动时被包含。

然后,我们部署一个名为project.war的文件,其中包含Spring依赖项和控制器端点。

然而,现在当我们调用端点并且端点执行widgetA.jar时,wire日志完全为空。我们看到wire日志出现在catalina.out中,但调用driver.manage().logs().get("wire")却为空。我不确定如何配置此项,以使我们显然得到的wire日志填充我们webdriver中的内部日志。

我可能只是对类加载器问题感到模糊,因为那似乎是问题所在。


更深入的挖掘揭示了org.apache.http仍在生成wire logs,但是当LogsServer.java执行updateSettings()org.apache.commons.logging.Log重定向/重新路由到com.machinepublishers.jbrowserdriver.WireLog时,这并没有像所有类从同一类加载器中执行时那样起作用。由于jbrowserdriver使用RMI进行执行,我有点难以理解这通常是如何工作的,尽管它仍然似乎与classLoaders相关的问题。 - zeusalmighty
附加信息:我已经修改了结构,不再使用tomcat的shared.loader属性,而是使用应用程序上下文来指定我想要包含映射到/WEB-INF/lib的jar。结果相同。我认为这排除了类加载器问题,并指向它仅从外部jar运行。 - zeusalmighty
1个回答

0

通过使用上下文资源,我们能够重新捕获日志。

在部署的project.war的/src/main/webapp/META-INF/context.xml中,我们可以指定一个“JarResources”资源,并使jar文件可用于同一类加载器。问题解决了。

以下是context.xml的布局:

<?xml version="1.0" encoding="UTF-8"?>

<Context path="/ourApp" docBase="/ourApp">
    <Resources>
        <PreResources className="org.apache.catalina.webresources.DirResourceSet"
            base="/path/to/our/configFiles/"
            webAppMount="/WEB-INF/classes" />
        <JarResources className="org.apache.catalina.webresources.DirResourceSet"
            base="/path/to/our/jars/libs"
            webAppMount="/WEB-INF/lib" />
        <JarResources className="org.apache.catalina.webresources.DirResourceSet"
            base="/path/to/our/jars/libs/widgets"
            webAppMount="/WEB-INF/lib" />
    </Resources>
</Context>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接