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