В настоящее время я пытаюсь автоматизировать загрузку файла на определенный сайт. Я могу успешно войти на сайт и перейти на страницу импорта; однако, когда я пытаюсь импортировать файл, я получаю сообщение об ошибке. Я предполагаю, что это потому, что я просто пользователь и не получаю разрешения на запись на сервер. Однако, если я выполняю импорт вручную, он будет успешным. Обычно для импорта будет четыре этапа. Однако после первого шага вы увидите, что произошла ошибка. Мой код приведен ниже наряду с сообщением об ошибке я получаю:Ошибка при отправке файла с помощью HtmlUnit
public static void main(String args[]) throws Exception {
login();
}
@SuppressWarnings("resource")
public static void login() throws Exception {
// Open the webclient using Internet Explorer (Chrome does not work).
final WebClient webClient = new WebClient(BrowserVersion.INTERNET_EXPLORER);
// Get the first page
final HtmlPage page = webClient.getPage("http://telephone.qqest.com/phone/Login/Login.asp");
// Get the form that we are dealing with.
final HtmlForm loginForm = page.getFormByName("frmLogin");
final HtmlTextInput userName = loginForm.getInputByName("Login");
final com.gargoylesoftware.htmlunit.html.HtmlPasswordInput passWord = (com.gargoylesoftware.htmlunit.html.HtmlPasswordInput)
loginForm.getInputByName("Password");
final HtmlTextInput companyID = loginForm.getInputByName("Ident");
webClient.getOptions().setCssEnabled(false);
webClient.getOptions().setRedirectEnabled(true);
webClient.setAjaxController(new NicelyResynchronizingAjaxController());
webClient.getCookieManager().setCookiesEnabled(true);
//final HtmlInput login = loginForm.getInputByName("Login");
// Change the values of the text fields.
userName.setValueAttribute("xxxx");
passWord.setValueAttribute("xxxxx");
companyID.setValueAttribute("xxxxx");
//create a submit button - it doesn't work with 'input'
DomElement loginBtn = page.createElement("button");
loginBtn.setAttribute("type", "submit");
// append the button to the form
loginForm.appendChild(loginBtn);
// submit the form
loginBtn.click();
//navigate to page for import.
HtmlPage page3 = webClient.getPage("http://telephone.qqest.com/phone/Imports/Employee/Module.asp");
//populate the textfield with the specified file.
final HtmlForm importForm = page3.getFormByName("ImportForm");
final HtmlFileInput inputFile = importForm.getInputByName("UploadFile");
inputFile.setValueAttribute("C:\\Users\\thisFile.xls");
inputFile.click();
final HtmlSubmitInput importBtn = (HtmlSubmitInput)importForm.getInputByValue("Import");
try {
importBtn.fireEvent(Event.TYPE_INPUT);
}
catch (NullPointerException ex) {
System.err.println(ex);
}
HtmlPage page4 = webClient.getPage("http://telephone.qqest.com/phone/Imports/Employee/ImportFile.asp?FileType=application/vnd.ms-excel&FilePath=c%3A%5Cinetpub%5Cwwwroot%5Cphone%5CDownloads%5CImports%5C&FileName=thisFile.xls.asp");
System.out.println("Import Page: " + page4.asText());
}
Ошибки я получаю:
Этап 1 из 4: Загрузить файл - Завершена Microsoft ошибки JET Database Engine «80004005» Не могу Обновить. База данных или объект доступны только для чтения. /phone/Imports/Employee/ImportFile.asp, строка 155
Я думаю, что нет необходимости нажимать на входной файл. Вместо fireEvent нажмите importBtn. Но, не имея доступа к реальной странице, я могу только догадываться, что происходит не так. – RBRi
Проблема была в том, что я не объявлял importBtn как HtmlPage, поэтому он не загружал новую страницу после отправки importBtn. Спасибо за совет! – duffanpj