如何让我的程序检查页面上是否存在图标

时间:2016-12-02 19:29:19

标签: java html css jsoup selector

我正在尝试创建一个程序,在页面上查找扩音器图标,以便我可以通过if语句运行它。我正在查看的页面是https://www.yelp.com/biz/sabor-unido-newark。在Chrome上使用检查器工具,我找到了扩音器图标的html:

<span aria-hidden="true" style="fill: #ea5c1d; width: 30px; height: 30px;" class="icon icon--30-bullhorn icon--size-30">
    <svg class="icon_svg">
        <use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#30x30_bullhorn"></use>
    </svg>
</span>

我正在使用JSoup,并且一直在努力寻找能够实现这一目标的正确方法。基本上我想要它说,&#34;如果页面有扩音器图标,那么就这样做。&#34;我尝试了很多Element选择器和hasAttr()方法,但似乎都没有。这很好,可能是因为我不是很流利的HTML,也许我的选择器语法错了。无论如何,你怎么看?

这是我与之合作的当前迭代:

import java.util.ArrayList;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.nodes.Attribute;
import org.jsoup.select.Elements;
import java.io.IOException;
import java.util.Scanner;

public class BullHorn
{
    public static void main(String[] args) throws IOException, Exception, RuntimeException
    {        
        String linkUrl = "https://www.yelp.com/biz/mega-pizza-newark?osq=pizza";

        Document linkClick = Jsoup.connect(linkUrl).timeout(3000).get();

        boolean bullhorn;

        for(Element element : linkClick.getAllElements())
        {
            for(Attribute attribute : element.attributes())
            {
                if (attribute.getValue().equalsIgnoreCase("#30x30_bullhorn"))
                {
                    bullhorn = true;
                }
            }
        }

        if (bullhorn = true)
        {
            System.out.println("True");
        }

        else 
        {
            System.out.println("False");
        }
    }
}

问题是,即使在没有实际拥有扩音器图标的链接上,这也总是会返回。

1 个答案:

答案 0 :(得分:1)

if(bullhorn = true)中存在语法错误,请记住=是赋值运算符,==检查基元之间的相等性。您也可以将if语句写为if(bullhorn)

在旁注,但仍然很重要:

如果你找到了扩音器,你应该从for循环中break,没有必要继续遍历每个元素。

例如:

public class BullHorn {

    public static void main(String[] args) throws IOException, Exception, RuntimeException {        
        String linkUrl = "https://www.yelp.com/biz/mega-pizza-newark?osq=pizza";

        Document linkClick = Jsoup.connect(linkUrl).timeout(3000).get();

        boolean bullhorn;

        for(Element element : linkClick.getAllElements()) {
            for(Attribute attribute : element.attributes()) {
                if (attribute.getValue().equalsIgnoreCase("#30x30_bullhorn")) {
                    bullhorn = true;
                    // no need to continue looping, we've found bullhorn
                    break;
                }
            }

            // no need to continue looping, we've found bullhorn
            if(bullhorn == true) {
                break;
            }
        }

        if (bullhorn == true) {
            System.out.println("True");
        } else {
            System.out.println("False");
        }
    }
}