Перейти к содержимому

Фотография

HtmlUnit и mozillaFirefox


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 3

#1 degradator

degradator

    Новый участник

  • Members
  • Pip
  • 59 сообщений
  • ФИО:смиромсерг

Отправлено 14 апреля 2012 - 17:01

никак не могу понять почему не работает вот эта функция на браузере ШтмлЮнит. Вот код, в котором все очень доступно закомментировано. Программа должна зайти на сайт игры Травиан и построить ферму id2 - вверху посередине экрана. Должна быть нажата кнопка, но ШтмлЮнит хоть и говорит что на нее нажал, фактически ничего не происходит, причем при авторизации тоже надо нажать на кнопку, и там ШтмлЮнит срабатывает. Помогите пожалуйста разобраться
(если сменить драйвер с HtmlUnitDriver на FirefoxDriver то все отрабатывает)

package javaapplication107;

import java.util.logging.Level;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.htmlunit.HtmlUnitDriver;
import org.openqa.selenium.support.ui.Wait;
import org.openqa.selenium.support.ui.WebDriverWait;

public class JavaApplication107 {
    
 public static WebDriver driver;
 public static Wait<WebDriver> wait;
 //куда загружаемся
 public static String navigate="http://ts9.travian.ru"; 
 //вводим лоогин
 public static String login="degradator11";
 //вводим пароль
 public static String password="qwer12";
 public static int h, m, s;
 public static void main(String[] args) {
      //объявляем дравер (штмлунит не работает, фирефокс работает)
      //driver = new FirefoxDriver();
      driver = new HtmlUnitDriver();
      //отключаю ругательства штмлунита на CSS
      java.util.logging.Logger.getLogger("com.gargoylesoftware.htmlunit").setLevel(Level.OFF);
      wait = new WebDriverWait(driver,10);
     
      try{ 
      driver.navigate().to(navigate);
       //куда загружаемся
      System.out.println("logged");
      driver.findElement(By.name("name")).sendKeys(login);
      System.out.println("name");
      driver.findElement(By.name("password")).sendKeys(password);
      System.out.println("pass");
      driver.findElement(By.name("lowRes")).click();
      System.out.println("lowres"); 
      driver.findElement(By.className("button-container")).click();
      System.out.println("enter");
       
    driver.navigate().to("http://ts9.travian.ru/build.php?id=2");
    System.out.println("Страница постройки открыта");
   //никак не работает
   // driver.findElement(By.className("button-container")).click();
    driver.findElement(By.xpath("//div[@ class = 'bbc']")).click(); 
    System.out.println("кнопка подтвердить строительство нажата");
      
    }catch(org.openqa.selenium.NoSuchElementException Ex){
    System.out.println("Сбой!!!");
    }
 }
}

  • 0
Мой сайт - Травиан бот :)

#2 degradator

degradator

    Новый участник

  • Members
  • Pip
  • 59 сообщений
  • ФИО:смиромсерг

Отправлено 15 апреля 2012 - 17:54

Народ, подскажите пожалуйста, может кто сталкивался с этой бедой? Реально нужно реализовать эту функцию, но ничего не выходит. Была версия что это какие-то сложные javaScript, но я так не думаю, другие подобные функции реализуются, а эта никак не хочет
  • 0
Мой сайт - Травиан бот :)

#3 LeshaL

LeshaL

    Профессионал

  • Members
  • PipPipPipPipPipPip
  • 1 094 сообщений
  • ФИО:Алексей Лянгузов
  • Город:Saint-Petersburg


Отправлено 15 апреля 2012 - 19:42

Народ, подскажите пожалуйста, может кто сталкивался с этой бедой? Реально нужно реализовать эту функцию, но ничего не выходит. Была версия что это какие-то сложные javaScript, но я так не думаю, другие подобные функции реализуются, а эта никак не хочет

JavaScript скорее всего. Сложный не нужен. Нужен какой-то, который мешает работать HTMLUnitDriver-у. Может быть всё что угодно. Без анализа страницы, на которой происходит, никто вам не поможет. А может и с ним тоже. Я когда пытался его прикрутить правил безобидный JS на некоторых страницах, иначе напрочь зависал. Но потом мы от него отказались ибо он то падал, то не работал.
Кстати, раньше надо было JavaScript явным образом включать в HtmlUnitDriver-e. В вашем коде этого нет.
  • 0
Regards,
Alexey

#4 degradator

degradator

    Новый участник

  • Members
  • Pip
  • 59 сообщений
  • ФИО:смиромсерг

Отправлено 16 апреля 2012 - 06:02

Спасибо, сейчас попробовал это сделать, но новые решения создают новые проблемы :)

Как я понимаю надо указать true:
driver = new HtmlUnitDriver(true);
но как только я указал true, то он почему-то перестал работать на строчке
driver.navigate().to(navigate);
выплевывает ошибку что-то вроде

com.gargoylesoftware.htmlunit.ScriptException: innerHTML is read-only for tag tr (http://ts9.travian.ru/crypt.js?1333371580#51)

Зашел по этой ссылке, и испугался, там много букавак, как с этим работать? Это надо всю кодировку менять? Я в JS ни бумбум, но наверно разберусь если надо будет..

Как можно справиться с этой бедой? Пробовал сделать htmlUnit(browserVersion.firefox3) или как-то так, все равно с javaScrypt не справляется.

Вобщем не знаю что делать, может пойдет и чистый firefox, только надо его как-то спрятать, или хотябы засунуть в JFrame. Можно ли это как-то сделать?
  • 0
Мой сайт - Травиан бот :)


Количество пользователей, читающих эту тему: 1

0 пользователей, 1 гостей, 0 анонимных