我有一个OneDrive文件夹的URL(https://1drv.ms/f/s!AtXoQFW327DIyMwPjZhmauUCSSHXUA)。拥有该链接的每个人都可以通过浏览器访问该文件夹。
现在,我的目标是创建一个.NET应用程序,在给定该链接的情况下,该应用程序能够获取该文件夹中的文件/文件夹列表。
这甚至可能吗?
执行此操作的最佳方法是使用通过Graph公开的OneDrive API。
您可以阅读"Using Sharing Links"文档以获取完整的详细信息,但您基本上可以致电:
https://graph.microsoft.com/v1.0/shares/u!aHR0cHM6Ly8xZHJ2Lm1zL2YvcyFBdFhvUUZXMzI3REl5TXdQalpobWF1VUNTU0hYVUE/driveItem/children
你也可以使用.NET SDK来避免自己调用API,在这种情况下你的代码看起来像:
client.Shares["u!aHR0cHM6Ly8xZHJ2Lm1zL2YvcyFBdFhvUUZXMzI3REl5TXdQalpobWF1VUNTU0hYVUE"].DriveItem.Children.Request().GetAsync();
Selenium Web Driver是这类任务的不错选择。
Selenium.Chrome.WebDriver
和Selenium.WebDriver
。所以现在,我们需要创建一个驱动程序服务,并在我们的网站中找到所需的元素。据我所知,文件名存储为名为signalFieldValue_03700093
的span类。
但是“Last Modified infos”也存储在这个类下面,我需要使用下面的代码跳过“Last Modified infos”:
bool skip = false;
List<string> myFiles = new List<string>();
ChromeDriverService service = ChromeDriverService.CreateDefaultService();
ChromeOptions option = new ChromeOptions();
var driver = new ChromeDriver(service, option);
driver.Url = "https://1drv.ms/f/s!AtXoQFW327DIyMwPjZhmauUCSSHXUA";
driver.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(10);
foreach (IWebElement element in driver.FindElements(By.XPath("//span[@class='signalFieldValue_03700093']")))
{
if (!skip)
{
myFiles.Add(element.Text);
skip = true;
}
else
skip = false;
}
结果,我们在名为myFiles
的字符串数组中有我们的文件名。
希望这可以帮助!