【问题标题】:Selenium 2: Detect content type of link destinationsSelenium 2:检测链接目标的内容类型
【发布时间】:2011-07-23 23:08:59
【问题描述】:

我正在使用 Selenium 2 Java API 与网页交互。我的问题是:如何检测链接目的地的内容类型?

基本上,这是背景:在单击链接之前,我想确保响应是 HTML 文件。如果没有,我需要以另一种方式处理它。因此,假设有一个 PDF 文件的下载链接。应用程序应该直接读取该 URL 的内容,而不是在浏览器中打开它。

我们的目标是让应用程序自动知道当前位置是 HTML、PDF、XML 还是其他任何内容,以使用适当的解析器从文档中提取有用信息。

更新

增加赏金:将奖励给允许我获取给定 URL 的内容类型的最佳解决方案。

【问题讨论】:

    标签: java selenium content-type selenium-webdriver


    【解决方案1】:

    正如 Jochen 所建议的,在不下载内容的情况下获取 Content-type 的方法是 HTTP HEAD,而 selenium webdrivers 似乎不提供这样的功能。您必须找到另一个库来帮助您获取 url 的内容类型。

    可以做到这一点的 Java 库是 Apache HttpComponents,尤其是 HttpClient

    (以下代码未经测试)

    HttpClient httpclient = new DefaultHttpClient();
    HttpHead httphead = new HttpHead("http://foo/bar");
    HttpResponse response = httpclient.execute(httphead);
    BasicHeader contenttypeheader = response.getFirstHeader("Content-Type");
    
    System.out.println(contenttypeheader);
    

    该项目发布JavaDoc for HttpClientHttpClient interface 的文档包含一个很好的示例。

    【讨论】:

    • 我仍然对那段代码有疑问。即使响应正常,实体也始终为空。
    • 可能是 HttpHead 响应不包含 HttpEntity。我已更改示例以从响应中获取 Content-type 标头,但仍未经测试。
    【解决方案2】:

    您可以从 DOM 中检索所有 URL,然后解析每个 URL 的最后几个字符(使用 java 正则表达式)以确定链接类型。

    您可以解析从最后一个点开始的字符。例如,在 url http://yoursite.com/whatever/test.pdf 中,提取 pdf,并相应地强制执行您的测试逻辑。

    我是否过度简化了您的问题?

    【讨论】:

    • 我觉得这太简单了。许多 URL 类似于 /generateImage.php?name=test,可以是任何图形格式。我想我需要自己获取链接内容。
    【解决方案3】:

    您可以确定内容类型将处理传入的数据。 不知道为什么你需要先弄清楚这一点。 如果是这样,请使用 HEAD 方法并查看 Content-Type 标头。

    【讨论】:

    • 如果我事先没有弄清楚,Firefox 可能会显示一些我想避免的下载弹出窗口。
    • 在这种情况下,HEAD 是要走的路。它为您提供了您将从 GET 调用中获得的所有标头,但没有实际内容。
    • 我找不到合适的方法来获取响应头。记住,我使用的是 Selenium 2。
    猜你喜欢
    • 2012-03-11
    • 1970-01-01
    • 1970-01-01
    • 2011-05-14
    • 2023-03-11
    • 2019-05-31
    • 1970-01-01
    • 2013-10-06
    • 1970-01-01
    相关资源
    最近更新 更多