问题描述
我想在 <h5>
中找到此链接us states"的元素.我正在 craigslist 中尝试这个.任何帮助将不胜感激
I want to find the element of this link "us states" in <h5>
. I am trying this in craigslist. Any help will be highly appreciated
这里是网址:http://auburn.craigslist.org/
<html class="">
<head>
<body class="homepage w1024 list">
<script type="text/javascript">
<article id="pagecontainer">
<section class="body">
<table id="container" cellspacing="0" cellpadding="0"
<tbody>
<tr>
<td id="leftbar">
<td id="center">
<td id="rightbar">
<ul class="menu collapsible">
<li class="expand s">
<li class="s">
<li class="s">
<h5 class="ban hot">us states</h5>
<ul class="acitem" style="display: none;">
</li>
<li class="s">
<li class="s">
推荐答案
在您的情况下,仅使用类名是不够的.
Only using class names is not sufficient in your case.
By.cssSelector(".ban")
有15个匹配节点By.cssSelector(".hot")
有11个匹配节点By.cssSelector(".ban.hot")
有5个匹配节点
By.cssSelector(".ban")
has 15 matching nodesBy.cssSelector(".hot")
has 11 matching nodesBy.cssSelector(".ban.hot")
has 5 matching nodes
因此,您需要更多限制来缩小范围.选项 1 和 2 可用于 css 选择器,1 可能是最适合您需求的选项.
Therefore you need more restrictions to narrow it down. Option 1 and 2 below are available for css selector, 1 might be the one that suits your needs best.
选项 1:使用列表项的索引(CssSelector 或 XPath)
限制
- 如果网站结构发生变化,则不够稳定
例子:
driver.FindElement(By.CssSelector("#rightbar > .menu > li:nth-of-type(3) > h5"));
driver.FindElement(By.XPath("//*[@id='rightbar']/ul/li[3]/h5"));
选项 2:使用 Selenium 的 FindElements
,然后对它们进行索引.(CssSelector 或 XPath)
Option 2: Using Selenium's FindElements
, then index them. (CssSelector or XPath)
限制
- 如果网站结构发生变化,则不够稳定
- 不是原生选择器的方式
例子:
// note that By.CssSelector(".ban.hot") and //*[contains(@class, 'ban hot')] are different, but doesn't matter in your case
IList<IWebElement> hotBanners = driver.FindElements(By.CssSelector(".ban.hot"));
IWebElement banUsStates = hotBanners[3];
选项 3:使用文本(仅限 XPath)
限制
- 不适用于多语言网站
- 仅适用于 XPath,不适用于 Selenium 的 CssSelector
例子:
driver.FindElement(By.XPath("//h5[contains(@class, 'ban hot') and text() = 'us states']"));
选项 4:索引分组选择器(仅限 XPath)
限制
- 如果网站结构发生变化,则不够稳定
- 仅适用于 XPath,不适用于 CssSelector
例子:
driver.FindElement(By.XPath("(//h5[contains(@class, 'ban hot')])[3]"));
选项5:通过href找到隐藏的列表项链接,然后遍历回h5(仅限XPath)
限制
- 仅适用于 XPath,不适用于 CssSelector
- 性能低下
- 棘手的 XPath
例子:
driver.FindElement(By.XPath(".//li[.//ul/li/a[contains(@href, 'geo.craigslist.org/iso/us/al')]]/h5"));
这篇关于需要通过 css 在 selenium 中查找元素的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!