c# - 遍历 Web 图片(Selenium、Windows 窗体、C#)
问题描述
我正在尝试遍历图像列表。一旦我将 XPath 的后端从 td/a[1] 替换为 td/a[2],我就会在我的文件夹中获得第二个图像。我想在目录中获取所有下载的文件(20 个图像),但我不知道如何遍历 XPath。任何人都可以帮助我吗?
var TwentyImages = driver.FindElements(By.XPath("//*
[@id='ctl00_Main_pnlSearchControl']/tbody/tr/td/table/tbody/tr/td/table[3]/tbody/tr[3]/td/a[2]"));
for (int i = 0; i < TwentyImages.Count; i++)
{
TwentyImages[i].Click();
var Images = driver.FindElements(By.TagName("img"));
foreach (var xs in Images)
{
var ImageUrl = xs.GetAttribute("src");
WebClient DL = new WebClient();
DL.DownloadFile(ImageUrl, @"C:\User\Desktop\GoogleImages\.jpg");
}
Thread.Sleep(1000);
driver.Navigate().Back();
driver.Quit();
}
解决方案
(根据评论中的新信息进行编辑)
如果您的 20 张图像 xpath 中每个单独图像的 XPath 是例如 Image1 位于(...)/td/a[1]
,而 Image2 位于(...)/td/a[2]
,等等,那么您可以简单地将路径a
从您的 XPath 中删除,然后使用:
var TwentyImages = driver.FindElements(By.XPath("//*
[@id='ctl00_Main_pnlSearchControl']/tbody/tr/td/table/tbody/tr/td/table[3]/tbody/tr[3]/td"));
从那里您的代码仍然能够找到您需要下载的每个图像 url的img
标签、属性。src
另外,不要忘记DL.DownLoad
根据下面的原始响应更改每个图像的文件名称。
(原始回复)
每次DL.DownloadFile(...)
调用其中的图像时,都会覆盖您的“.jpg”文件名ImageUrl
。
您可以foreach()
用另一个for()
循环替换您的并将文件名设置为索引值,这将在保存时为每个文件提供一个唯一的名称并防止它被覆盖:
例子:
for(int xs = 0; xs < Images.Count(); xs++)
{
var ImageUrl = Images[xs].GetAttribute("src");
WebClient DL = new WebClient();
DL.DownloadFile(ImageUrl, $@"C:\Users\Desktop\{xs}.jpg");
}
推荐阅读
- html - 引导剂量工作虽然它已安装
- refactoring - ESLINT 错误:迭代器/生成器需要 regenerator-runtime,我应该如何解决这个问题?
- sql - SQL - 摆脱嵌套聚合选择
- php - Laravel 7 非法偏移类型
- oracle - 可以用相同的种子随机生成不同的记录集吗
- javascript - 我如何知道 Express 中的语言和请求软件(浏览器)?
- typescript - 我如何通过打字稿实现承诺接口?
- android - Dart 资源监视器
- sql - 使用 3 个表连接获取 API 列表
- python - 如何在 Python 中使用条件计算 For 循环内的 stdev