2015-03-15 2 views
2

Я изучаю значение javascript переменной с использованием Selenium WebDriver (последняя версия). Иногда это работает, иногда нет. Ниже моя попытка на whoscored.com и продолжает показывать ошибкуКак прочитать переменную javascript, используя Selenium?

using (IWebDriver driver = new ChromeDriver()) 
{    
    driver.Navigate().GoToUrl("http://www.whoscored.com/Regions/81/Tournaments/3/Germany-Bundesliga"); 
    var wait = new WebDriverWait(driver, TimeSpan.FromSeconds(30)); 
    var tournament = wait.Until(ExpectedConditions.ElementExists(By.Id("tournament-fixture-wrapper")));    
    IJavaScriptExecutor js = driver as IJavaScriptExecutor;     
    var obj = (object)js.ExecuteScript("return window.allRegions;"); //always return error 'Additional information: Unable to cast object of type 'System.Int64' to type 'System.String'.  
} 
+0

И что такое JavaScript вы хотите прочитать ? Можете ли вы предоставить это? – Saifur

+0

это в ссылке http://www.whoscored.com/Regions/81/Tournaments/3/Germany-Bundesliga var allRegions = [{type: 1, id: 248, flg: 'flg-caf', имя: ' Африка, турниры: [{id: 290, url: '/ Регионы/248/Турниры/290/Африка-CAF-Лига чемпионов, имя: «Лига чемпионов CAF»}, {id: 573, url:'/Регионы/248/Турниры/573/Africa- ', name:' '}, ... извините, что слишком долго, чтобы вставить здесь –

ответ

3

Я думаю, вы должны изменить

var obj = (object)js.ExecuteScript("return window.allRegions;"); 

в

List<object> list = js.ExecuteScript("return window.allRegions;") as List<object>; 

так, return window.allRegions; не возвращает string но array от objects.

Редактировать

Просто прошел через страницы и выглядит как window.allRegions возвращает List из json объектов. И, похоже, создание списка json-объекта может быть нежелательным для подавления программирования. Я предлагаю вам сузить цель либо с изменением javascript, либо выполнением некоторых фильтров, как показано ниже.

var wait = new WebDriverWait(_driver, TimeSpan.FromSeconds(30)); 
var tournament = wait.Until(ExpectedConditions.ElementExists(By.Id("tournament-fixture-wrapper"))); 
IJavaScriptExecutor js = _driver as IJavaScriptExecutor; 

//getting count of regions 
long count = (long)js.ExecuteScript("return window.allRegions.length;"); 

for (int i = 0; i < count; i++) 
{ 
    //grab the name of countries if that's what you wanted 
    string name = js.ExecuteScript("return window.allRegions[" + i + "].name;") as string; 

    Console.WriteLine(name); 
} 

Print:

Африка
Албания Алжир

...
Замбия
Зимбабве

+0

спасибо, но ошибка все тот же –

+0

OK. Но что здесь делается? – Saifur

+0

@namvo Смотрите мое редактирование – Saifur

Смежные вопросы