当前位置: 首页 > 面试题库 >

当我从Web浏览器中打开HTML并用Java读取它时,为什么html源是不同的?

东方俊材
2023-03-14
问题内容

我有一个关于解析在线html页面的问题。

当我从Web浏览器打开html源代码时,可以在其中看到数据。

但是,当我从Java读取此html页面时。我无法到达数据。

保存此html文件并将其读取为本地文件后,

然后我就可以从那里读取数据了。

我以eBay.com.au为例。

// - - - - 例 - - - - -

目标网页网址:http://www.ebay.com.au/sch/i.html?_trksid = p3907.m570.l1311&_nkw =
imac + 27&_sacat = 0&_from = R40

这是我的Java代码

import org.htmlcleaner.CleanerProperties;
import org.htmlcleaner.TagNode;
import org.htmlcleaner.HtmlCleaner;
import java.net.URL;


public class HtmlCleanerTest
{

    public static void main(String[] args) throws Exception
    {

        CleanerProperties props = new CleanerProperties();

        URL myURL = new URL("http://www.ebay.com.au/sch/i.html?_trksid=p3907.m570.l1311&_nkw=imac+27&_sacat=0&_from=R40");

        TagNode tagNode = new HtmlCleaner(props).clean(myURL);

        Object[] myNodes = tagNode.getElementsByAttValue("class", "s1", true, true);

        for(Object oNote : myNodes)
        {
            TagNode n = (TagNode) oNote;
            System.out.println(n.getText());

        }
    }
}

我可以使用此代码获取每个产品的价格,但我希望通过此代码获得卖家的位置信息。我怎么做?

//-重新编辑-------------------------------

我找到了解决问题的方法,我在这里发贴给了像我这样的人。我并不是说这是最好的解决方案,但我希望它能给您一个思路。这里是。

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.firefox.FirefoxDriver;
import java.util.List;;

public class Test{
    public static void main(String[] args)
    {
        WebDriver driver = new FirefoxDriver();
        driver.get("http://www.ebay.com.au/sch/i.html?scp=ce0&_sacat=0&_from=R40&_nkw=imac+27&_pppn=r1&_rdc=1");

        driver.findElement(By.id("e1-14")).click();

        driver.findElement(By.name("Stores")).click();
        driver.findElement(By.id("e1-3")).click();

        driver.quit();
    }
}

/ -------------- ------ END ------- -------------- /

我来到这里有一个问题,如果HTMLFile附带Javascript怎么办,如何在执行完Javascript的情况下从中获取数据。我想我不是很好的发问者。


问题答案:

该页面可能包含一些JavaScript代码,这些代码由浏览器执行,并在HTML加载后将更多数据加载到该页面。仅使用Java读取HTML不会执行JavaScript,因此在流中看不到其他数据。

编辑:像HtmlUnit这样的库可能会在某种程度上帮助解决加载Ajaxified
Html页面的常见问题:http://htmlunit.sourceforge.net/



 类似资料:
  • 我想通过浏览器打开下载的html文件,将它们传递给意图并从我的活动中启动它们。 我知道关于这个问题有十几条线索(例如this)。 然而,这些方法似乎都不起作用。 到目前为止,我已经: 我尝试设置mimeypes,如text/html,添加/删除类别,甚至使用多重mimetype和额外的mimetype标志,但这些想法都不适合我。 当前将打开一个“默认”浏览器,该浏览器无法显示文件。我想在Chrom

  • 但是,当我使用不带参数的url(时,它工作正常。

  • 问题内容: 我想知道如何使PDF文件链接可下载,而不是在浏览器中打开它们?如何在html中完成?(我认为这是通过javascript或其他方式完成的)。 问题答案: 您无法使用HTML执行此操作。这是基于服务器的解决方案。您必须流式传输文件,以便浏览器触发保存对话框。 我建议不要这样做。用户如何与PDF交互应由用户决定。 更新: 所以…这个答案仍然有很多不足之处。我认为部分原因是这是4年前回答的,

  • 我正在使用Python和Selenium捕获网页的HTML源,这样我就可以解析它来找到一个特定的元素。然而,它的来源与我使用浏览器的“Inspect Element”视图时得到的不同。我要找的元素不在硒提供的源中。有没有办法使用硒,或者使用另一种工具或方法获得相同的源?

  • 问题内容: 我的Java Swing应用程序生成一个HTML文件,在生成和保存该文件时,我想用默认的浏览器将其打开。我怎样才能做到这一点? 问题答案: 如果您使用的是Java 6,请使用Desktop.open()。它允许您使用默认应用程序打开任何与系统上的文件类型相关联的文件。

  • 这是一个概念性的问题,因为我试图理解在react中处理表格数据的最佳方法,而不使用任何特殊组件或库。 我在子组件中动态创建的html表中有数据。数据来自父组件。有些列具有可编辑的内容,我通过“编辑”按钮触发这些内容,以重新呈现表格的一个版本,该版本包含可编辑列的所有行的内联文本框。 当我更改文本框的内容时,我希望能够单击“保存”按钮并保存所有行。 “保存”和“编辑”按钮不在表中内联,而是位于我的组