2015-09-08 5 views
1

позвольте мне сначала выпустить ошибку, затем я объясню контекст, и, наконец, я покажу код и объясню это.Selenium - не удается подключиться к удаленному серверу

Ошибка enter image description here

Здесь же/подобная ошибка с использованием FirefoxDriver enter image description here

Контекстное

Я сделал программу, чтобы пройти через веб-сайты и собрать некоторые данные. Эта программа работает 100% на моем рабочем столе Windows 7 Professional, но когда я перехожу на свой сервер, который является сервером Windows 2003 с .net framework 3.5, он выдает указанную выше ошибку.

Обратите внимание, что приложение имеет многопоточность в приведенном выше случае, есть два потока, в которых работают 2 экземпляра селена. Проблема с приложением возникает, когда они заканчивают сбор списка ссылок, которые они хотят исследовать. Один поток будет работать и набирать список ссылок один за другим, когда они другие завершат сбор ссылок, которые он хочет исследовать как из клиентов селена, так и забрасывают ошибку выше.

Я не использовал никаких функций, не предназначенных для .net framework 3.5 .... Все стандартизовано, чтобы соответствовать серверу 2003 года (по крайней мере, насколько мне известно).

Код

Когда собирают ссылки:

List<string> totalList = new List<string>(); 
       if (loadedSave == null) 
       { 
        webManager.driver.Navigate().GoToUrl(getOffenderListURL(countyId)); 
        for (int l = 2; l < 10000; l++) 
        { 
         try 
         { 
          var element1 = new WebDriverWait(webManager.driver, TimeSpan.FromSeconds(5)).Until(ExpectedConditions.ElementExists((By.XPath(getOffenderxPath(l))))); 

          string linkToOffender = element1.GetAttribute("href"); 
          string offenderId = linkToOffender.Substring(linkToOffender.IndexOf('=') + 1); 
          if (totalList.Contains(offenderId)) 
          { 
           continue; 
          } 
          totalList.Add(offenderId); 
//----- ^^^^^ Add the links/ids to a list for later----- 
         } 
         catch (Exception e) 
         { 
// ignore this error catch.... its not relevant 
          if (totalList.Count < 5 && countyId != 21) 
          { 
           if (Program.SiteDownCounter < 4) 
           { 
            if (Program.LastDown != DateTime.MinValue) 
            { 
             if ((DateTime.Now - Program.LastDown).TotalMinutes > 30) 
             { 
              Program.sendMail("NY State website seems to be down... will suspend action for 30 minutes. Current time: " + DateTime.Now, "NY State Site Down!"); 
              Program.LastDown = DateTime.Now; 
              Program.SiteDownCounter++; 
              for (int x = 0; x < 30; x++) 
               Thread.Sleep(1000); 
             } 
             else 
             { 
              Thread.Sleep((1800 - (int)((DateTime.Now - Program.LastDown).TotalSeconds)) * 1000); 
             } 
            } 
            else 
            { 
             Program.sendMail("NY State website seems to be down... will suspend action for 30 minutes. Current time: " + DateTime.Now, "NY State Site Down!"); 
             Program.LastDown = DateTime.Now; 
             Program.SiteDownCounter++; 
             for (int x = 0; x < 30; x++) 
              Thread.Sleep(1000); 
            } 
           } 
           else 
           { 
            start = false; 
            break; 
           } 
           continue; 
          } 
          break; 
         } 
        } 
       } 
       else 
       { 
        if (loadedSave.CompletedList != null) 
         totalList = loadedSave.CompletedList; 
        else 
        { 
         Console.WriteLine("The hell?"); 
        } 

       } 
       Program.LastDown = DateTime.MinValue; 
       Program.SiteDownCounter = 0; 
       ScrapeLogic(countyId, out2, loadedSave, totalList); 
      } 

Как только его сделали сбор ссылок:

private void ScrapeLogic(int countyId, string value, ScraperStateSave LoadedSaveState, List<string> total) 
     { 
      ScraperStateSave saveState = new ScraperStateSave(); 
      saveState.CountyId = countyId; 
      int totalCompletedCount = (LoadedSaveState != null ? LoadedSaveState.CompletedCount : 0); 
      int instanceCompletedCount = 0; 
      for (int l = totalCompletedCount; l < total.Count; l++) 
      { 
       try 
       { 
        if (Program.SiteDownCounter >= 3) 
         throw new Exception("Shutdown"); 
        webManager.driver.Navigate().GoToUrl(getOffenderLinkById(total[l])); 
        string offenderId = total[l]; 
        var currentPlacement = webManager.getElementTextByxPath(currentPlacementxPath, true); 
        Boolean wanted = false; 
        try 
        { 
         IWebElement wantedLabel = webManager.driver.FindElement(By.XPath("//*[@id=\"mainContent\"]/h3[2]")); 
         wanted = true; 
        } 
        catch (NoSuchElementException) 
        { 

        } 
        var lastName = webManager.getElementTextByxPath(getOffenderInfoBasic(1, 2)); 
        var firstName = webManager.getElementTextByxPath(getOffenderInfoBasic(1, 3)); 
        var middleName = webManager.getElementTextByxPath(getOffenderInfoBasic(1, 4)); 
        var dob = webManager.getElementTextByxPath(getOffenderInfoBasic(1, 5)); 
        var sex = webManager.getElementTextByxPath(getOffenderInfoBasic(1, 6)); 
        var riskLevel = webManager.getElementTextByxPath(getOffenderInfoBasic(1, 7)); 
        var designation = webManager.getElementTextByxPath(getOffenderInfoBasic(1, 8)); 
....and more of the same 

Как заходов резьбы:

public NYScaper(Boolean local, Boolean quiet, int id) 
    { 
     this.localScrape = local; 
     this.threadId = id; 
     this.quiet = quiet; 
     Thread t = new Thread(doScrape); 
     t.Start(); 
    } 

Некоторый код, который может быть вопрос:

public IWebElement getElementByxPath(string xpath) 
     { 
      return driver.FindElement(By.XPath(xpath)); 
     } 


     public string getElementTextByxPath(string xpath) 
     { 
      return driver.FindElement(By.XPath(xpath)).Text; 
     } 

     public string getElementTextByxPath(string xpath, Boolean wait) 
     { 
      return new WebDriverWait(driver, TimeSpan.FromSeconds(2)).Until(ExpectedConditions.ElementExists((By.XPath(xpath)))).Text; 
     } 

Главная проблема/Обзор:

Работает на Windows 7 Professional, но не 2003 сервер! Кажется, что возникают ошибки только между сбором ссылок и сбором данных или в начале сбора данных. Есть два потока, и они работают без проблем на локальном рабочем столе Windows 7. Если программа перезагружена, она загрузит сохранение ссылок и будет работать с этими сохраненными ссылками без ошибок!

ответ

0

Эта ошибка возникает, когда браузер не отображается в качестве верхнего экрана. Поэтому, если вы минимизируете это, это в конечном итоге произойдет.

Для решения этой проблемы на данный момент нет решения для https://code.google.com/p/selenium/.