Selenium 2:检测链接目标的内容类型
Posted
技术标签:
【中文标题】Selenium 2:检测链接目标的内容类型【英文标题】:Selenium 2: Detect content type of link destinations 【发布时间】:2011-07-23 23:08:59 【问题描述】:我正在使用 Selenium 2 Java API 与网页交互。我的问题是:如何检测链接目的地的内容类型?
基本上,这是背景:在单击链接之前,我想确保响应是 html 文件。如果没有,我需要以另一种方式处理它。因此,假设有一个 PDF 文件的下载链接。应用程序应该直接读取该 URL 的内容,而不是在浏览器中打开它。
我们的目标是让应用程序自动知道当前位置是 HTML、PDF、XML 还是其他任何内容,以使用适当的解析器从文档中提取有用信息。
更新
增加赏金:将奖励给允许我获取给定 URL 的内容类型的最佳解决方案。
【问题讨论】:
【参考方案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 HttpClient,HttpClient 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。以上是关于Selenium 2:检测链接目标的内容类型的主要内容,如果未能解决你的问题,请参考以下文章