如何修改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
相关产品推荐
相关产品推荐

