Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 可能使用HTMLUnit重定向_Java_Htmlunit - Fatal编程技术网

Java 可能使用HTMLUnit重定向

Java 可能使用HTMLUnit重定向,java,htmlunit,Java,Htmlunit,我正在做一个小程序,可以谷歌搜索你想要的歌曲并打印歌词。为此,我将HTMLUnit与Java结合使用。我正在搜索目标文本,然后单击第一个google结果。但是,当我从浏览器中检查结果时,页面会有所不同 我的错误可能是因为XPath,但我不确定。因为,我使用了Google Chrome的XPATH查看器和2个Firefox扩展 在chrome中,我右键单击要查看其XPATH的元素,然后右键单击底部窗口中的锚点。然后,我选择复制XPath。然后我将适当的s改为' 这是到目前为止我的源代码。我现在随便

我正在做一个小程序,可以谷歌搜索你想要的歌曲并打印歌词。为此,我将HTMLUnit与Java结合使用。我正在搜索目标文本,然后单击第一个google结果。但是,当我从浏览器中检查结果时,页面会有所不同

我的错误可能是因为XPath,但我不确定。因为,我使用了Google Chrome的XPATH查看器和2个Firefox扩展

在chrome中,我右键单击要查看其XPATH的元素,然后右键单击底部窗口中的锚点。然后,我选择复制XPath。然后我将适当的s改为'

这是到目前为止我的源代码。我现在随便写了一首歌

多谢各位

源代码:

我试了很多东西。所以,我很抱歉,因为混乱的源代码。我擦掉这些线并不是为了向你展示我迄今为止所做的努力。再次感谢你

import java.io.IOException;
import java.net.MalformedURLException;

import com.gargoylesoftware.htmlunit.BrowserVersion;
import com.gargoylesoftware.htmlunit.FailingHttpStatusCodeException;
import com.gargoylesoftware.htmlunit.WebClient;
import com.gargoylesoftware.htmlunit.html.HtmlAnchor;
import com.gargoylesoftware.htmlunit.html.HtmlPage;


public class dsa {
    public static void main(String args[]) throws FailingHttpStatusCodeException, MalformedURLException, IOException {

        WebClient webClient = new WebClient(BrowserVersion.FIREFOX_3_6);
        webClient.setThrowExceptionOnScriptError(false);
        //webClient.setJavaScriptEnabled(false);

        String address = "http://www.google.com/search?q=";
        String searchString = "Metallica - Whiskey In The Jar";
        //String searchString = "testtesttest";
        String someString = address.concat(searchString);
        String lastString = someString.concat(" site:randomlyricswebpageblabla.com");

        // site:anotherrandomlyricswebpage.com

        HtmlPage currentPage = webClient.getPage(lastString);
/*
        HtmlTextInput searchBox = (HtmlTextInput) currentPage.getElementById("search_input");
        searchBox.setTextContent("Amorphis - From The Heaven Of My Heart");

        HtmlButtonInput button = (HtmlButtonInput) currentPage.getElementById("search_button");

        HtmlPage newPage = button.click();
*/      
        //System.out.println(currentPage.asText());

        //

        //

        //HtmlElement element = (HtmlElement)currentPage.getByXPath("//h3").get(0);
        //DomNode result = element.getChildNodes().get(0);
        //HtmlAnchor hede = (HtmlAnchor) element.getFirstChild();
        //HtmlPage newPage = hede.click();

        //HtmlElement firstGoogleResult = (HtmlElement) currentPage.getByXPath("//*[@id='rso']/li[1]/div/h3/a").get(0);
        //HtmlAnchor testAnchor = (HtmlAnchor) firstGoogleResult.getFirstChild();

        HtmlAnchor firstGoogleResult = (HtmlAnchor) currentPage.getByXPath("//*[@id='rso']/li[1]/div/h3/a").get(0);

        HtmlPage newPage = firstGoogleResult.click();

        //HtmlAnchor linkTest = (HtmlAnchor) newPage.getByXPath("//*[@id='contentdiv_left']/div/div[3]/text()[1]");



        //HtmlDivision divContent = (HtmlDivision) newPage.getByXPath("\\div[contains(@class, 'contentdiv_leftbox_data')]");
        //System.out.println(divContent.asText());

        //System.out.print("*************\n\n\n" + newPage.asText());
        System.out.println(newPage.asText());
    }
}
我明白了

推特按钮

推特

程序执行后在控制台中

那么,我的第一个谷歌搜索结果的XPath是错误的,还是我在别处错了


多谢各位

由于userAgent,您获得了错误的数据

当谷歌收到请求时,它会在数据库中搜索包含以下数据的旧搜索:IP+网络浏览器+你的电脑数据

我不知道HTMLUnit的默认用户代理是什么,但是如果您将它设置为与您正在使用的版本相同的版本,它应该会得到相同的响应

另外,我会尝试在一个合适的歌词网站上搜索,而不是谷歌。我不知道任何美国歌词网站,但应该很容易找到


希望有帮助

我搜索了一个拥有最大数据库的网站,在我找到的网站中,我看到这个网站正在使用谷歌定制搜索。所以我选择了这条路。所以,我想我会为Firefox 12.0或Chrome找到一些额外的库和东西。嗯,我能在哪里找到这些吗?如果不行,我最好换一个图书馆。非常感谢您的回复。我认为WebClient中有一个方法叫做userAgent。看看它是如何工作的,我会看看,但我认为我不能在上面写FIREFOX_12_0。但是,我会检查这个方法。谢谢,不一定。看看这里。它应该有帮助:只需搜索userAgent。我不知道;我不知道它是如何工作的,但是如果你在正确的地方搜索,它应该会工作的,我想我找到了。你确定谷歌没有采取措施避免搜索吗?他们想让我使用他们的API来避免机器人之类的东西吗?非常感谢。谷歌有一个你可能想了解的定制。它们不允许您以编程方式进行搜索,否则您将开始运行CAPTCHA和其他机器人检测器。