【问题标题】:How to download linked text - Selenium C#如何下载链接文本 - Selenium C#
【发布时间】:2021-07-18 14:58:03
【问题描述】:

我正在尝试创建一个自动从行文本下载文件。 不幸的是,我无法让它工作。我是硒新手。

这是一个 HTML 网站代码:

Ttnc-18p - 17.34 GB

<table class="table table-stripped">
    <thead>
        <tr>
            <th>Name</th>
            <th>Größe</th>
            <th>DL</th>
        </tr>
    </thead>

    <tbody>
                    <tr>
            <td><a href="/get/vobqwunyrrxl2oo5">Ttnc-18p.part01.rar</a>
            </td><td>500.00 MB</td>
            <td><a href="/get/vobqwunyrrxl2oo5"><img width="16" height="16" src="//filer.net/media/images/ico_arrow_down.png?2018" alt="DL"></a>
        </td></tr>
                    <tr>
            <td><a href="/get/rgpwrydtby6s1zdh">Ttnc-18p.part01.rev</a>
            </td><td>500.00 MB</td>
            <td><a href="/get/rgpwrydtby6s1zdh"><img width="16" height="16" src="//filer.net/media/images/ico_arrow_down.png?2018" alt="DL"></a>
        </td></tr>
                    <tr>
            <td><a href="/get/qjfyfyusx9pbycrg">Ttnc-18p.part02.rar</a>
            </td><td>500.00 MB</td>
            <td><a href="/get/qjfyfyusx9pbycrg"><img width="16" height="16" src="//filer.net/media/images/ico_arrow_down.png?2018" alt="DL"></a>
        </td></tr>
                    <tr>
            <td><a href="/get/pydwswtrhoqenolb">Ttnc-18p.part03.rar</a>
            </td><td>500.00 MB</td>
            <td><a href="/get/pydwswtrhoqenolb"><img width="16" height="16" src="//filer.net/media/images/ico_arrow_down.png?2018" alt="DL"></a>
        </td></tr>

我要它的下载链接来自:Ttnc-18p.part01.rar、Ttnc-18p.part02.rar、Ttnc-18p.part03.rar等等... 我试过这个:

ChromeDriver.FindElement(By.XPath("/table[contains(@class,'table table-stripped')]/tbody/tr/td/a[contains(text(),'" + "Ttnc-18p.part01.rar" + "')]")).Click();

它不起作用,我不知道该怎么做。其他任何事情都失败了。

我要尝试的第二件事是代码将生成需要下载的链接数组,以便我可以将代码提供给具有不同链接数量的不同网站。

请帮忙。

【问题讨论】:

    标签: c# html selenium xpath href


    【解决方案1】:

    您可以尝试以下方法,但您可能希望将它们分解为单独的方法以实现可重用性:

    public IEnumerable<string> DownloadLinks(string url)
    {
        // for storing each href value as it is retrieved from the links
        var listOfLinks = new List<string>();
    
        // start your instance of ChromeDriver
        var driver = new ChromeDriver();
        
        // Navigate to the url you passed in
        driver.Navigate().GoToUrl(url);
    
        // Get a collection of all anchor ("a") tags. 
        var anchorTags= driver.FindElements(By.TagName("a"));
    
        // Now for each anchor tag...
        foreach(var link in anchorTags)
        {
            // ...retrieve the value of its 'href' attribute (i.e. your link)...
            var l = link.GetAttribute("href");
            
            // ...add the link path to your listOfLinks
            // and append your url to the href since the href is only a partial 
            // ( /get/vobqwunyrrxl2oo5 becomes https://yourwebsite.com/get/vobqwunyrrxl2oo5)
            listOfLinks.Add(url + l);
            
            // now click your link to simulate clicking the link and downloading the file
            link.Click();
        }
    
        // and finally return your list of links
        return listOfLinks;
    
    }
    

    【讨论】:

    • 嘿,谢谢,但有两件事:1. .Dump() 在我尝试使用它时出错。 2. foreach 中真正的“anchorTags”是什么,因为它在我的代码中也是红色的。 @Stemado
    • .Dump() 是 LINQPad 的扩展,而 anchorTags 是我在没有实际更改变量的情况下重命名超链接。代码已更新
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-01
    • 1970-01-01
    • 2018-01-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多