Определенно, есть пара способов, чтобы описать то, что вы описали, поэтому я рассмотрю два из них, которые, как мне кажется, лучше всего подойдут для вашего сценария
Селен
Итак, вы упомянули выше селен, который, безусловно, является хорошей, надежной средой веб-автоматизации, однако, чтобы использовать ее для нескольких сайтов, у вас может возникнуть небольшая проблема, связанная с необходимостью добавления определенного метода с разными локаторами для каждого отдельного сайта для вход в систему, навигация и разбор сайта для получения информации.
например. Для одного сайта ваш код селена может быть
public void LoginSiteA(){
FirefoxDriver fd = new FirefoxDriver();
fd.get(SiteUrlA);
WebElement Username = fd.findElement(By.Id("Unique-ID-1"));
WebElement Password = fd.findElement(By.ID("Unique-ID-2"));
//Set Text on WebElements and submit
}
И это будет работать довольно хорошо, к сожалению, локаторы «Unique-Id» для идентификации каждого элемента могут (и, скорее всего, будут) различаться для разных веб-сайтов, и вам потребуется отдельный набор локаторов для каждого веб-сайта, который вы хотите поддержка, которая бы очень быстро запуталась. Что подводит меня ко второму методу
Загрузка исходного HTML-кода
Вторым вариантом очистки страницы может быть загрузка исходного кода HTML непосредственно с сайта, и это будет работать хорошо:
- Вы можете выполнить аутентификацию через запрос http
- Это было бы очень общим для нескольких веб-сайтов, так как локаторы не нужны
- Обычно это происходит быстрее, чем селен, так как не требуется отображать веб-страницу
То, как вы можете делать это на Java, может быть таким:
Итак, прежде всего, если сайт должен войти в систему, вам нужно будет выполнить аутентификацию, я рекомендую проверить этот сайт здесь для ускоренного курса по крайней мере для аутентификации NTLM, однако каждый сайт может отличаться в методах аутентификации, и вам может потребоваться добавить поддержку для каждого протокола аутентификации по мере их появления.
Используя приведенный ниже код, вы можете затем ввести имя пользователя и пароль, а также URL-адрес, и, надеюсь, если все будет работать хорошо, вы можете получить исходный HTML-код сайта и проанализировать его для любых потребностей.
static final String kuser = "username"; // your account name
static final String kpass = password; // retrieve password for your account
static class MyAuthenticator extends Authenticator {
public PasswordAuthentication getPasswordAuthentication() {
// I haven't checked getRequestingScheme() here, since for NTLM
// and Negotiate, the usrname and password are all the same.
System.err.println("Feeding username and password for " + getRequestingScheme());
return (new PasswordAuthentication(kuser, kpass.toCharArray()));
}
}
public static void main(String[] args) throws Exception {
Authenticator.setDefault(new MyAuthenticator());
URL url = new URL(args[0]);
InputStream ins = url.openConnection().getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(ins));
String str;
while((str = reader.readLine()) != null)
System.out.println(str);
}
Что касается опасений, связанных с большим объемом трафика, поступающего из одного источника, вы можете связаться с сайтами, на которые вы будете заходить, с вашей службой, чтобы узнать, 1) согласны ли они с этим и 2) потенциально могут внести в белый список ваш IP-адрес службы для увеличения пропускной способности, поскольку вы сказали, что служба может работать на компьютерах ваших клиентов, однако это может вызвать дополнительные трудности.
Если есть что-то еще, с чем я могу помочь, пожалуйста, дайте мне знать:)
-Джеймс