【问题标题】:Get every ID from HTML-Code which contains certain Css-Value从包含某些CSS值的HTML代码获取每个ID
【发布时间】:2021-12-29 02:20:06
【问题描述】:

我试图从包含特定 Css 值的 HTML 代码中获取每个 ID,并将它们写入列表。

我已经可以通过以下方式获得第一个 ID:

List<string> MyList = new List<string>();
int Count = driver.FindElements(By.TagName("My_Value")).Count;

for(int i=0; i<Count; i++)
{
     string ID = driver.FindElement(By.CssSelector("div.My_Value")).GetAttribute("id");

     MyList.Add(ID);
}

问题是,我总是从 HTML 代码中获取第一个 ID,尽管 MyValue 存在于不同的 ID 中。那么我怎样才能告诉程序“跳转”已经检查的值呢?

【问题讨论】:

  • 您是否有指向您试图从中获取孩子的网页的链接,这将有助于解决问题。如果你这样做,请用这些详细信息更新你的问题
  • 很遗憾无法链接到该网站,因为该网站是公司内部的。
  • 如果您有机会提供您正在查看的扩展的 dom,请将其添加到您的问题中,以便对您的问题进行静态考虑

标签: c# selenium selenium-webdriver getattribute


【解决方案1】:

代码看起来不错,但它没有运行循环,正如您所说的那样,它正在查找符合您的条件的第一个元素,然后是完整的。要获得所有这些,请尝试:

string ID = driver.FindElements(By.CssSelector("div.My_Value")).GetAttribute("id");

我自己没试过,但试一试

【讨论】:

  • 不幸的是它不起作用。 FindElements 不包含 GetAttribute() 之类的方法
【解决方案2】:

如果您使用By.TagName("My_Value") 构建列表,则只会收集&lt;My_Value&gt; 元素并将其放入列表中,即

<My_Value>class="foo bar"...</My_Value> 

向前移动,在循环内FindElement(By.CssSelector("div.My_Value")) 仅将具有 class 属性的 &lt;div&gt; 元素标识为 My_Value,即

<div>class="My_Value"...</div>

所以外部FindElements() 和内部循环FindElement() 不匹配。因此,您不会获得所有值。


解决方案

要遍历您需要使用的所有收集到的列表元素:

string ID = driver.FindElement(By.TagName("My_Value")).GetAttribute("id");

【讨论】:

    【解决方案3】:

    我想通了。

    您必须使用 var 变量来保护所有元素。并通过 foreach 循环获取 ID。

    List<string> MyList = new List<string>();
    
    var ID = driver.FindElement(By.CssSelector("div.My_Value"));
    
    foreach(IWebElement element in ID)
    {
         element.GetAttribute("id")
         MyList.Add(ID);
    }
    

    【讨论】:

      猜你喜欢
      • 2020-09-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-22
      • 1970-01-01
      • 2022-11-12
      • 1970-01-01
      相关资源
      最近更新 更多