Я пытаюсь продвинуть свои знания java, пытаясь автоматизировать очистку веб-страницы и ввод формы. Я экспериментировал с jsoup и теперь htmlunit. Я нашел пример htmlunit, который я пытаюсь запустить.Выражение выражения в java htmlunit
public class GoogleHtmlUnitTest {
static final WebClient browser;
static {
browser = new WebClient();
browser.getOptions().setJavaScriptEnabled(false);
// browser.setJavaScriptEnabled(false);
}
public static void main(String[] arguments) {
boolean result;
try {
result = searchTest();
} catch (Exception e) {
e.printStackTrace();
result = false;
}
System.out.println("Test " + (result? "passed." : "failed."));
if (!result) {
System.exit(1);
}
}
private static boolean searchTest() {
HtmlPage currentPage;
try {
currentPage = (HtmlPage) browser.getPage("http://www.google.com");
} catch (Exception e) {
System.out.println("Could not open browser window");
e.printStackTrace();
return false;
}
System.out.println("Simulated browser opened.");
try {
((HtmlTextInput) currentPage.getElementByName("q")).setValueAttribute("qa automation");
currentPage = currentPage.getElementByName("btnG").click();
System.out.println("contents: " + currentPage.asText());
return containsPattern(currentPage.asText(), "About .* results");
} catch (Exception e) {
System.out.println("Could not search");
e.printStackTrace();
return false;
}
}
public static boolean containsPattern(String string, String regex) {
Pattern pattern = Pattern.compile(regex);
// Check for the existence of the pattern
Matcher matcher = pattern.matcher(string);
return matcher.find();
}
}
Он работает с некоторыми ошибками HtmlUnit, что я нашел на StackOverflow игнорировать. Программа работает правильно, поэтому я беру совет и игнорирую ошибки.
Jul 31, 2016 7:29:03 AM com.gargoylesoftware.htmlunit.DefaultCssErrorHandler error
WARNING: CSS error: 'https://www.google.com/search?q=qa+automation&sa=G&gbv=1&sei=_eCdV63VGMjSmwHa85kg' [1:1467] Error in declaration. '*' is not allowed as first char of a property.
В данный момент проблема заключается в выражении регулярного выражения, которое используется для поиска. Если я понимаю это правильно, «qa automation» просматривается в режиме googled, и поисковая страница просматривается по адресу:
return containsPattern (currentPage.asText(), «About. * Results»);
Что меня бросает, это «О. * Результаты». Это регулярное выражение, но я не понимаю, как его интерпретируют. Что искали на извлеченной странице?
спасибо. Кажется, это работает. Он находит «около 5 230 000 результатов». Я сделал несколько экспериментов, и кажется, что «О» должно быть в позиции 1. Я изменил регулярное выражение на «230. * Results», но он его не нашел. Я попробовал ". * 230. * Results", и он не нашел. Как бы я нашел 230 в выше? –
Ну, проблема с '230. * Results', это будет соответствовать фразам типа' 230 foobar results'. Вы пытаетесь найти «около 5,230,000 результатов», но используете 230 в вашем регулярном выражении? Для этого вы бы сделали что-то вроде '. *, 230,. *'. К сожалению, это также соответствует 6 230 000. Но я понятия не имею, что вы пытаетесь сделать. Помните, что пробелы имеют значение - они совпадают. –
Я не пытаюсь ничего сделать, кроме как узнать, как работает регулярное выражение «About. * Results». Я вижу, что он нашел «около 6,230,000 результатов». Не понимая, как все это работает, я изменил regex на «230. * Results», ожидая, что он найдет тот же результат. Это не так. Это заставило меня поверить, что «О» должно быть на первом месте. Пробовал свои «. *, 230,. *», И он нашел то же самое. И последний вопрос. В приведенном выше «Около 6,230,000 результатов», как бы я закодировал regex, чтобы найти «230» в любой позиции, за которой следует «результат», т. Е. «Foobar 230 foobar2 results»? –