Подтвердить что ты не робот

Селендроид как скребок

Я намерен создать приложение для Android, которое будет запускать безгласный вход на веб-сайт, а затем очистить содержимое с последующей страницы при сохранении сеанса входа в систему.

Сначала я использовал HtmlUnit в обычном проекте Java, и он работал нормально. Но позже выяснилось, что HtmlUnit несовместим с Android.

Затем я попробовал JSoup библиотеку, отправив запрос HTTP "POST" в форму для входа. Но итоговая страница не загружается полностью, так как JSoup не поддерживает JavaScript.

Мне тогда предложили взглянуть на Selendroid, который фактически является платформой автоматизации тестирования Android. Но мне действительно нужен парсер Html, который поддерживает как JavaScript, так и Android. Я считаю, что Selendroid довольно сложно понять, что я даже не могу понять, какие зависимости использовать.

  • selendroid-клиент
  • selendroid-автономный
  • selendroid-сервер

С Selenium WebDriver код будет таким же простым, как и следующий. Но может ли кто-нибудь показать мне аналогичный пример кода для Selendroid?

    WebDriver driver = new FirefoxDriver();
    driver.get("https://mail.google.com/");

    driver.findElement(By.id("email")).sendKeys(myEmail);
    driver.findElement(By.id("pass")).sendKeys(pass);

    // Click on 'Sign In' button
    driver.findElement(By.id("signIn")).click();

А также

  • Какие зависимости можно добавить в мой файл Gradle.Build?
  • Какие библиотеки Selendroid для импорта?
4b9b3361

Ответ 1

К сожалению, я не получил работу Selendroid. Но я нашел обходное решение для очистки динамического содержимого, используя только Android, встроенный в WebView с включенным JavaScript.

mWebView = new WebView();
mWebView.getSettings().setJavaScriptEnabled(true);
mWebView.addJavascriptInterface(new HtmlHandler(), "HtmlHandler");

mWebView.setWebViewClient(new WebViewClient() {
   @Override
   public void onPageFinished(WebView view, String url) {
       super.onPageFinished(view, url);

       if (url == urlToLoad) {
       // Pass html source to the HtmlHandler
       WebView.loadUrl("javascript:HtmlHandler.handleHtml(document.documentElement.outerHTML);");

   }
});

Метод JS document.documentElement.outerHTML будет извлекать полный html, содержащийся в загруженном URL-адресе. Затем возвращаемая строка html отправляется методу handleHtml в классе HtmlHandler.

class HtmlHandler {
        @JavascriptInterface
        @SuppressWarnings("unused")
        public void handleHtml(String html) {
            // scrape the content here

        }
    }

Вы можете использовать библиотеку Jsoup, чтобы очистить необходимый контент от строки html.

Ответ 2

Я никогда не использовал Selendroid, поэтому я не совсем уверен в этом, но в поиске по сети я нашел этот пример и, в соответствии с этим, я полагаю, что ваш перевод кода из Selenium в Selendroid будет:

Код перевода (на мой взгляд)

public class MobileWebTest {
  private SelendroidLauncher selendroidServer = null;
  private WebDriver driver = null;

  @Test
  public void doTest() {

     driver.get("https://mail.google.com/");

     WebElement email = driver.findElement(By.id("email")).sendKeys(myEmail);
     WebElement password = driver.findElement(By.id("pass")).sendKeys(pass);

     WebElement button = driver.findElement(By.id("signIn")).click();

     driver.quit();
  }

  @Before
  public void startSelendroidServer() throws Exception {
    if (selendroidServer != null) {
      selendroidServer.stopSelendroid();
    }

    SelendroidConfiguration config = new SelendroidConfiguration();

    selendroidServer = new SelendroidLauncher(config);
    selendroidServer.launchSelendroid();

    DesiredCapabilities caps = SelendroidCapabilities.android();

    driver = new SelendroidDriver(caps);
  }

  @After
  public void stopSelendroidServer() {
    if (driver != null) {
      driver.quit();
    }
    if (selendroidServer != null) {
      selendroidServer.stopSelendroid();
    }
  }
}

Что вы должны добавить в свой проект

Кажется, что вы должны добавить в свой проект Selendroid standalone jar file. Если у вас есть сомнения по поводу добавления внешнего флага в проект Android, вы можете увидеть этот вопрос: Как использовать внешние JAR в проекте Android?

Здесь вы можете загрузить файл jar file: jar

Кроме того, кажется, что недостаточно просто добавить jar file к вашему проекту. Вы также должны добавить selendroid-client jar file версии автономной версии, которая у вас есть.

Вы можете скачать его здесь: клиентский файл jar

Я надеюсь, что это будет полезно для вас!

Ответ 3

Я бы предложил вам использовать WebdriverIO, так как вы хотите использовать Javascript. Он использует NodeJs, поэтому будет легко потребовать, чтобы другие плагины очищали HTML.

Appium также является альтернативой, но он больше ориентирован на тестирование переднего плана.