Java 可能使用HTMLUnit重定向
我正在做一个小程序,可以谷歌搜索你想要的歌曲并打印歌词。为此,我将HTMLUnit与Java结合使用。我正在搜索目标文本,然后单击第一个google结果。但是,当我从浏览器中检查结果时,页面会有所不同 我的错误可能是因为XPath,但我不确定。因为,我使用了Google Chrome的XPATH查看器和2个Firefox扩展 在chrome中,我右键单击要查看其XPATH的元素,然后右键单击底部窗口中的锚点。然后,我选择复制XPath。然后我将适当的s改为' 这是到目前为止我的源代码。我现在随便写了一首歌 多谢各位 源代码: 我试了很多东西。所以,我很抱歉,因为混乱的源代码。我擦掉这些线并不是为了向你展示我迄今为止所做的努力。再次感谢你Java 可能使用HTMLUnit重定向,java,htmlunit,Java,Htmlunit,我正在做一个小程序,可以谷歌搜索你想要的歌曲并打印歌词。为此,我将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和其他机器人检测器。