Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Selenium 自动化:从xml菜单中提取链接_Selenium_Xpath_Drop Down Menu_Selenium Webdriver_Automation - Fatal编程技术网

Selenium 自动化:从xml菜单中提取链接

Selenium 自动化:从xml菜单中提取链接,selenium,xpath,drop-down-menu,selenium-webdriver,automation,Selenium,Xpath,Drop Down Menu,Selenium Webdriver,Automation,嗨,我想知道是否有人能帮我解决一些困扰我的问题 我正在尝试从第页的菜单中提取所有子链接: 我尝试过使用selenium并搜索xpath,但似乎只有当您仅在上面一个级别时,最低子项的链接才会出现,要查看每个变量,可能会出现2000多个。我不仅希望有一种节省时间的方法,而且还希望有一种方法可以让鼠标右键单击“保存链接位置”并粘贴到文本文件错误中不会遗漏任何内容 最低的子链接如下所示: 这个链接是为香蕉,这是一个恰当的描述,我在那里的时刻 里面有书架这个词。谢谢 好吧,这确实不是一项琐碎的任务,但有解

嗨,我想知道是否有人能帮我解决一些困扰我的问题

我正在尝试从第页的菜单中提取所有子链接:

我尝试过使用selenium并搜索xpath,但似乎只有当您仅在上面一个级别时,最低子项的链接才会出现,要查看每个变量,可能会出现2000多个。我不仅希望有一种节省时间的方法,而且还希望有一种方法可以让鼠标右键单击“保存链接位置”并粘贴到文本文件错误中不会遗漏任何内容

最低的子链接如下所示:

这个链接是为香蕉,这是一个恰当的描述,我在那里的时刻


里面有书架这个词。谢谢

好吧,这确实不是一项琐碎的任务,但有解决方案。下面是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;
    }
}

你能提供一个输出文件样本吗。几行就足够了。嗨,Andrey,我希望输出文件如下:-hp/shelf/1215259254410/1/so_false-hp/shelf/910000976333/1/so_false-hp/shelf/910000975878/1/so_false-hp/shelf/1215312754908/1/so_false