在命令行运行HtmlUnit与Jython - 启动问题

3 投票
3 回答
1098 浏览
提问于 2025-04-17 04:16

我按照这个教程尝试用 Jython 运行 HtmlUnit:

http://blog.databigbang.com/web-scraping-ajax-and-javascript-sites/

但是对我来说不太管用。我无法导入 com.gargoylesoftvare 这个包,HtmlUnit 文件夹里只有一些 HTML 文件,我需要以某种方式导入它们。

教程里说要这样运行 Python 脚本:

/opt/jython/jython -J-classpath "htmlunit-2.8/lib/*" gartner.py

然后我尝试运行:

java -jar /Users/adam/jython/jython.jar -J-classpath "htmlunit-2.8/lib/*" gartner.py

我的问题是我收到了一个“未知选项:J-classpath”的错误。但是在 Jython.org 上根本没有提到 -J-classpath 这个参数。我会非常感激任何建议。我是在 Snow Leopard 上运行独立版的 jython 2.5.2。

3 个回答

0

我之前也遇到过这样的错误,按照以下步骤我成功解决了它。

  1. 首先,下载 jython,然后运行 java -jar python-installer-xxx.jar 来安装 jython。安装完成后,把 jython/bin 文件夹添加到你的系统路径中。接着,在命令行中输入 jython 来确认它是否正常工作。
  2. 接下来,去 sourceforge 下载 htmlunit 的 jar 文件,并记得指定它们的位置。
  3. 然后,写好你的 .py 文件并运行

    jython -J-classpath "/Users/crabime/Development Folder/htmlunit-2.23/lib/*" /Users/crabime/PycharmProjects/scrapimage/crabime/gartner.py

这样一切就应该没问题了。如果你还是遇到“找不到模块”的错误,可能是你输入的命令有误,检查一下吧。

1

你可以通过命令 jython myscript.py 来运行一个 Jython 脚本,但前提是这个脚本需要把它运行所需的 jar 文件的完整网址添加到 Python 的路径中,这个操作是通过 sys.path.append 来实现的。

下面是我正在处理的一个脚本。

#!/opt/jython/jython
'''
Created on Dec 7, 2011
@author: chris
'''
import sys, os
from time import sleep

jarpath = '/usr/share/java/htmlunit/' #path the jar files to import
jars = ['apache-mime4j-0.6.jar','commons-codec-1.4.jar',
    'commons-collections-3.2.1.jar','commons-io-1.4.jar',
    'commons-lang-2.4.jar','commons-logging-1.1.1.jar',
    'cssparser-0.9.5.jar','htmlunit-2.8.jar',
    'htmlunit-core-js-2.8.jar','httpclient-4.0.1.jar',
    'httpcore-4.0.1.jar','httpmime-4.0.1.jar',
    'nekohtml-1.9.14.jar','sac-1.3.jar',
    'serializer-2.7.1.jar','xalan-2.7.1.jar',
    'xercesImpl-2.9.1.jar','xml-apis-1.3.04.jar'] #a list of jars

def loadjars(): #appends jars to jython path
    for jar in jars:
        print(jarpath+jar+'\n')
        container = jarpath+jar
        sys.path.append(container)

loadjars()

import com.gargoylesoftware.htmlunit.WebClient as WebClient
webclient = WebClient()   

def gotopage():
    print('hello, I will visit Google')
    url = 'http://google.com'
    page = webclient.getPage(url)
    print(page)    

if __name__ == "__main__":
    gotopage()
1

你的整个命令行都是由 java 命令来处理的(这本来就是应该这样),而 -J-classpath 确实不是 java 命令的有效选项。你真的应该尽量按照教程的步骤来做,因为你漏掉了几个重要的步骤(而且有点在自己随意加步骤)。

撰写回答