【问题标题】:Can't Locate A Link Using CSS Selectors无法使用 CSS 选择器找到链接
【发布时间】:2014-10-20 08:53:22
【问题描述】:

我正在尝试使用 Selenium 从 google 收集一些结果,但我使用的 CssSelector 一直返回“未找到元素”。

这是我的代码。

//Open google page
IWebDriver driver = new FirefoxDriver();
WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(10));
driver.Navigate().GoToUrl("https://www.google.com/search?q=cheese");
wait.Until(driver1 => ((IJavaScriptExecutor)driver).ExecuteScript("return document.readyState").Equals("complete"));

//Get image link
IWebElement image_link = driver.FindElement(By.CssSelector("a[class='q qs']"));

异常发生在最后一行,我试图获取的锚在网页上是这样写的。

<a class="q qs" href="/search?q=cheese&amp;client=firefox-a&amp;hs=YWQ&amp;rls=org.mozilla:en-US:official&amp;source=lnms&amp;tbm=isch&amp;sa=X&amp;ei=ewL9U-S5FNGpyATTl4CgCA&amp;ved=0CAgQ_AUoAQ">Images</a>

怎么了?

【问题讨论】:

    标签: c# css selenium selenium-webdriver css-selectors


    【解决方案1】:

    我认为在这里获得link by text更加可靠和明确

    IWebElement image_link = driver.FindElement(By.LinkText("Images"));
    

    【讨论】:

    • 似乎很有用。感谢您的提示,但我仍然很好奇为什么我的 CssSelector 无法正常工作,因为我需要在没有任何可预测链接文本的地方使用它们。
    • @user3875080 好吧,我尝试了相同的代码,但使用了 selenium python 绑定 - 它对我有用。让我们试试下面的选择器:a.q.qs.
    【解决方案2】:

    您没有将 css 选择器传递给 css 类。您正在向它传递一个按属性过滤的元素选择器。试试:

    By.CssSelector(".q.qs")
    

    【讨论】:

      【解决方案3】:

      https://www.simple-talk.com/dotnet/.net-framework/xpath,-css,-dom-and-selenium-the-rosetta-stone/

      参考上面的链接。 试试这段代码吧。

      IWebElement image_link = driver.FindElement(By.CssSelector("a.q qs"));
      

      并使用 xpath

      IWebElement image_link = driver.FindElement(By.Xpath("//a[@class='q qs']"));
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-09-03
        • 1970-01-01
        • 2016-03-24
        • 2015-04-28
        • 1970-01-01
        • 2014-03-01
        • 2016-07-24
        相关资源
        最近更新 更多