0

Привет, мне интересно, может ли кто-нибудь помочь мне в чем-то, что меня озадачило.Автоматизация: Извлечь ссылки из xml Меню

Я пытаюсь извлечь все дочерние ссылки из меню на странице:

http://groceries.asda.com/asda-webstore/landing/home.shtml#/cat/1215135760597

Я попытался с помощью селена и поиска XPath, но это, кажется, что связь по самым низким дочерним элементам появляется только когда вы находитесь только на один уровень выше и пройти через каждый вариант, существует более 2000 возможностей. Мне не только понравился способ экономии времени, но и метод, который не позволил бы упустить устаревшее расположение ссылки правой кнопкой мыши и сохранить его в текстовом файле!

Самые низкие дочерние ссылки выглядит следующим образом: http://groceries.asda.com/asda-webstore/landing/home.shtml#/shelf/910001112609/1/so_false

Эта ссылка для Бананы

где есть слово shelf в них (что является точным описанием того, где я нахожусь в данный момент!). Благодаря!

+0

Не могли бы вы предоставить образец выходного файла. Мало линий будет достаточно. –

+0

Привет, Андрей, я бы хотел, чтобы выходной файл выглядел так: http://groceries.asda.com/asda-webstore/landing/home.shtml?cmpid=ahc--ghs-d1--asdacom-dsk-_ -hp #/полка/1215259254410/1/so_false http://groceries.asda.com/asda-webstore/landing/home.shtml?cmpid=ahc--ghs-d1--asdacom-dsk-_-hp#/полка/910000976333/1/so_false http://groceries.asda.com/asda-webstore/landing/home.shtml?cmpid=ahc--ghs-d1--asdacom-dsk-_-hp#/shelf/ 910000975878/1/so_false http://groceries.asda.com/asda-webstore/landing/home.shtml?cmpid=ahc--ghs-d1--asdacom-dsk-_-hp#/shelf/1215312754908/1/so_false –

ответ

0

Ну, это действительно не тривиальная задача, но есть решение. Ниже тестового примера C#, который просматривает все ссылки на вашем сайте и извлекает текст href из меню, у которого нет дочерних элементов (последний в списках). Порт на ваш язык самостоятельно =)

using System; 
using NUnit.Framework; 
using OpenQA.Selenium; 
using OpenQA.Selenium.Chrome; 

[TestFixture] 
public class WalkLink 
{ 
    private ChromeDriver driver; 
    private const string url = @"http://groceries.asda.com/asda-webstore/landing/home.shtml"; 

    [SetUp] 
    public void SetUp() 
    { 
     driver = CreateBrowser(url); 
    } 

    [TearDown] 
    public void TearDown() 
    { 
     driver.Dispose(); 
    } 

    [Test] 
    public void WalkingThrough() 
    { 
     const string rootItemsSelector = "#primary-nav-items > li > div > div > div > ul > div > li"; 
     Console.WriteLine("We are here"); 

     var navItems = driver.FindElements(By.CssSelector("#primary-nav-items > li")); 
     var menusCount = navItems.Count; 
     for (int i = 0; i < menusCount; i++) 
     { 
      navItems[i].Click(); 
      Walk(rootItemsSelector); 
     } 
    } 

    void Walk(string selector) 
    { 
     var items = driver.FindElements(By.CssSelector(selector)); 
     var count = items.Count; 
     for (int i = 0; i < count; i++) 
     { 
      for (var a = 0; a < 10; a++) 
      { 
       try 
       { 
        items = driver.FindElements(By.CssSelector(selector)); 
        Assert.AreEqual(count, items.Count); 
        var item = items[i]; 
        item.Click(); 
        if (!HasChild(item)) 
        { 
         //HERE you can save href to your file 
         Console.WriteLine(Href(item)); 
        } 

        break; 
       } 
       catch{} 
      } 

      Walk(selector + " > ul > div > li"); 
     } 
    } 

    public bool HasChild(IWebElement element) 
    { 
     var link = element.FindElement(By.CssSelector("a")); 
     return link.GetAttribute("class").Contains("hasChild"); 
    } 

    public string Href(IWebElement element) 
    { 
     var link = element.FindElement(By.CssSelector("a")); 
     return link.GetAttribute("href"); 
    } 

    internal static ChromeDriver CreateBrowser(string urlString) 
    { 
     var url = new Uri(urlString); 
     ChromeDriver browser = null; 
     browser = new ChromeDriver(); 
     browser.Manage().Window.Maximize(); 
     browser.Navigate().GoToUrl(url); 
     return browser; 
    } 
} 
Смежные вопросы