开发Web scraper的问题

时间:2012-04-14 06:24:02

标签: javascript xss web-scraping jsoup

我想开发一个用户可以输入网址的平台,然后我的网站将在iframe中打开网页。现在,用户只需右键单击就可以修改他的网站,我将为他提供“删除此元素”,“复制此元素”等选项。我差不多了。许多网站在iframe中完美开放,但是对于一些网站,一些错误已经出现。我无法找出原因,所以请求你的帮助。

我已经解决了XSS问题等其他问题 这是我遵循的程序: - 使用JavaScript并将请求发送到我的Java服务器,该服务器连接到用户指定的URL并获取HTML,然后使用Jsoup HTML解析器将相对URL转换为绝对URL,然后使用Java将HTML保存到我的磁盘。然后我将保存的HTML呈现到我的iframe

出了问题?
一些网站工作正常,但有些网站没有。

例如: -
当我试图打开http://www.snapdeal.com时,它给了我 Uncaught TypeError: Cannot read property 'paddingTop' of undefined 错误。我不明白为什么会发生这种情况..

更新 我真的很想知道这是如何实现的? @ http://www.proxywebsites.in/browse.php?u=Oi8vd3d3LnNuYXBkZWFsLmNvbQ%3D%3D&b=13&f=norefer

3 个答案:

答案 0 :(得分:1)

2个问题,选择你喜欢的任何一个:

  • 您的服务器端代理代码包含错误
  • 大量网站都有明确的帧中断代码或者至少期望成为顶级框架。

答案 1 :(得分:0)

我的代理服务器端代码: -

DateFormat df = new SimpleDateFormat("ddMMyyyyHHmmss");
    String dirName = df.format(new Date());

    String dirPath = "C:/apache-tomcat-7.0.23/webapps/offlineWeb/" + dirName;
    String serverName = "http://localhost:8080/offlineWeb/" + dirName;

    boolean directoryCreated = new File(dirPath).mkdir();
    if (!directoryCreated) 
        log.error("Error in creating directory");

    String html = Jsoup.connect(url.toString()).get().html();
    doc = Jsoup.parse(html, url);

    links = doc.select("link");
    scripts = doc.select("script");    
    images = doc.select("img");

for (Element element : links) {
        String linkHref = element.attr("abs:href");
        if (linkHref != "") {
            element.attr("href", linkHref);
        }
}

for (Element element : scripts) {
    String scriptSrc = element.attr("abs:src");
    if (scriptSrc != "") {
        element.attr("src", scriptSrc);
    }
}

for (Element element : images) {
    String imgSrc = element.attr("abs:src");
        if (imgSrc != "") {
            element.attr("src", imgSrc);
            log.info(imgSrc);
        }
}

现在我只是返回保存我的html文件的路径 这是关于我的服务器代码

答案 2 :(得分:0)

你可以尝试一件事。在您的代理脚本中,您将网页保存在磁盘上,然后加载到iframe中。我认为不是在iframe中加载您保存在磁盘上的页面,而是尝试在浏览器中打开该页面。所有那些将其页面重新加载到iframe中的网站现在都会打开而不会出现任何错误。 试试这个我认为这是一项工作