You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修改C#中Selenium的getlink方法以返回链接数组?

修改C#方法以返回所有抓取到的链接数组

原代码(someclass.cs)

namespace XXX
{
    internal class yyy
    {
        public string getlink(string urlz)
        {
            var options = new ChromeOptions();
            using var driver = new ChromeDriver(options);
            driver.GoToUrl(urlz);
            var getlinks = driver.FindElements(By.XPath(".//xxxx/a"));
            foreach (var link in getlinks )
            {
                string resultlink = link.GetAttribute("href");
            }
            //question here
            return as array resultlink
        }
    }
}

修改方案

要让getlink方法返回所有抓取到的链接数组,只需做以下几点调整:

  • 把方法返回类型从string改为string[](字符串数组)或List<string>(字符串列表,操作更灵活)
  • 创建集合存储所有链接,避免临时变量被循环覆盖
  • 循环中将每个有效链接添加到集合
  • 最后返回集合转换后的数组(或直接返回列表)

修改后的完整代码(返回数组版):

namespace XXX
{
    internal class yyy
    {
        // 修改返回类型为字符串数组
        public string[] getlink(string urlz)
        {
            var options = new ChromeOptions();
            using var driver = new ChromeDriver(options);
            driver.GoToUrl(urlz);
            var getlinks = driver.FindElements(By.XPath(".//xxxx/a"));
            
            // 创建列表存储所有链接
            var linksList = new List<string>();
            
            foreach (var link in getlinks )
            {
                string resultlink = link.GetAttribute("href");
                // 跳过空链接,避免无效值
                if (!string.IsNullOrEmpty(resultlink))
                {
                    linksList.Add(resultlink);
                }
            }
            
            // 将列表转为数组返回
            return linksList.ToArray();
        }
    }
}

如果偏好更灵活的列表返回类型,可改用此版本:

namespace XXX
{
    internal class yyy
    {
        public List<string> getlink(string urlz)
        {
            var options = new ChromeOptions();
            using var driver = new ChromeDriver(options);
            driver.GoToUrl(urlz);
            var getlinks = driver.FindElements(By.XPath(".//xxxx/a"));
            
            var linksList = new List<string>();
            
            foreach (var link in getlinks )
            {
                string resultlink = link.GetAttribute("href");
                if (!string.IsNullOrEmpty(resultlink))
                {
                    linksList.Add(resultlink);
                }
            }
            
            return linksList;
        }
    }
}

Form1中的调用示例

无论返回数组还是列表,都可以直接用foreach遍历操作:

yyy listlink = new yyy();
var listalllink = listlink.getlink("domaindotcom");
foreach (var singlelink in listalllink )
{
    // 执行自定义操作,比如输出链接、添加到窗体控件等
    // MessageBox.Show(singlelink);
}

注:按C#命名规范,建议将方法名改为GetLink(首字母大写的帕斯卡命名法),变量名也尽量见名知意,比如urlz改为url,能提升代码可读性。

内容的提问来源于stack exchange,提问作者smiley rainbow

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 13:05:19