我遇到了一个问题" find_element_by_css_selector"得到元素"选择" (a href)。
我尝试了以下方法,但所有这些方法都不起作用:
driver.find_element_by_css_selector("div.plan.right > a.select.").click()
driver.find_element_by_xpath("//div[@class='plan right']/div[2]/a/select").click()
有人可以给我一些建议吗?谢谢!
<div class="choose_plan">
<h1>Sign up now for <strong>UNLIMITED</strong> access <br/>to all </h1>
<div class="plans">
<div class="plan left">
<div class="head">
<p>MONTHLY</p>
</div>
<div class="body">
<p>annually</p>
</div>
<hr />
<a href="/bbb?plan_id=6" class="select signup-dialog" data-planId="6" data-url="/users/new?r">SELECT</a>
</div>
<div class="plan right">
<img alt="Popular-right" class="popular" src="/assetse8.png" />
<div class="head">
<p>14</p>
</div>
<div class="body">
<p>Unlimited</p>
</div>
<hr />
<a href="/account/purchase?plan_id=31" class="select signup-dialog" data-planId="31" data-url="/users/new?aaa">SELECT</a>
</div>
</div>
</div>
答案 0 :(得分:3)
我知道你已经有了答案,但这是一个简单的替代方案,将来可能会有所帮助。根据您提供的HTML,<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<body ng-app='controls'>
Type into second box with caps on or off and see what happens!
<br/>
<input type="text" />
<input type="password" id="search-box" ng-model="searchString" placeholder="text search" />
<p>{{searchString}}</p>
<div></div>
</body>
属性对于每个data-planId
标记看起来都是唯一的。您可以使用下面的代码来利用它。
A
有关详细信息,请参阅此CSS Selector reference。
答案 1 :(得分:0)
由于第15行(<div class="choose_plan">
)似乎未公开,因此形成格式良好的HTML会很有帮助。下面的解决方案是在删除此行的情况下完成的,但其余的HTML如图所示。您可以测试online XPath here。
driver.find_element_by_xpath("//div[@class='plan right']/a").click()
产生以下结果:
Element='<a href="/account/purchase?plan_id=31" class="select signup-dialog" data-planId="31" data-url="/users/new?aaa">SELECT</a>'
答案 2 :(得分:0)
我会尽量简单:
driver.find_element_by_css_selector("div.right a.select")
或者:
driver.find_elements_by_link_text("SELECT")[-1]
这里我们基本上得到了a
文本的最后一个SELECT
元素。