如何从<form action =“ in” html =“” with =“” jsoup =“”

时间:2019-02-21 20:22:00

标签: java html jsoup

=“”

试图从网站的html源中提取链接,但是我无法获取它以打印出结果。我对提取链接有些陌生,因此我的代码可能全都错了(任何澄清都会有所帮助)。我要输出的链接是来自productUrl https://shop.ccs.com/checkout/cart/add/uenc/aHR0cHM6Ly9zaG9wLmNjcy5jb20vaGFwcHktc29ja3Mtd2l6LWtoYWxpZmEtYmxhY2stYW5kLWJsdWUtc29ja3MtOS0xMQ,,/product/383628/

https://shop.ccs.com/happy-socks-wiz-khalifa-black-and-blue-socks-9-11
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.ListIterator;
import java.util.Map;
import java.util.Scanner;
import org.jsoup.Connection;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import org.jsoup.Connection.Method;

public class mains {
    public static void main(String[] args) throws IOException {
        Document doc = Jsoup.connect(productUrl)
                .userAgent("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.109 Safari/537.36")
                .get();
        Elements links = doc.select("form[action]");
        Elements imports = doc.select("link[action]");
        String absHref = links.attr("abs:action");
        System.out.println(absHref);
    }
}

3 个答案:

答案 0 :(得分:0)

对不起,但是网站的回复不好 它使用JavaScript加载项目,而jsoup不支持javascript。

   <html style="height:100%">
 <head>
  <meta NAME="ROBOTS" CONTENT="NOINDEX, NOFOLLOW">
  <meta name="format-detection" content="telephone=no">
  <meta name="viewport" content="initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
 </head>
 <body style="margin:0px;height:100%">
  <iframe src="/_Incapsula_Resource?SWUDNSAI=28&amp;xinfo=2-19174853-0%200NNN%20RT%281550817024158%20820%29%20q%280%20-1%20-1%20-1%29%20r%280%20-1%29%20B12%284%2c316%2c0%29%20U2&amp;incident_id=433000770024986768-116635626567173330&amp;edet=12&amp;cinfo=04000000" frameborder="0" width="100%" height="100%" marginheight="0px" marginwidth="0px">Request unsuccessful. Incapsula incident ID: 433000770024986768-116635626567173330</iframe>
 </body>
</html>

答案 1 :(得分:0)

简短的答案是,如果您想将产品添加到购物篮中,则可以访问以下URL:https://shop.ccs.com/checkout/cart/addAjax/?product=383628&related_product=&qty=1

长话大说,这个网站向没有真实HTML内容的URL提交了一个表单,但是使用javascript进一步处理了您的请求。 Jsoup无法解决这个问题,但是我们可以作弊并使用Web浏览器的调试器来窥视接下来发生的事情,这就是我获得上述URL的方式。

enter image description here

您可以轻松地使用具有不同产品ID和数量的相同链接。请记住,如果您要提出其他要求(例如,检查购物篮中的物品),则还应传递从先前请求中获得的Cookie。没有那个,你的篮子将永远是空的。

答案 2 :(得分:0)

使用 htmlunit 抓取网站,它还支持javascript,还支持xpath和cssSelector。 使用Maven

<dependency> <groupId>net.sourceforge.htmlunit</groupId> <artifactId>htmlunit</artifactId> <version>2.33</version> </dependency>

谢谢。