Selenium - driver.find_element_by_css_selector无法找到元素(python)

时间:2015-10-01 02:08:36

标签: python selenium-webdriver

我遇到了一个问题" 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>

3 个答案:

答案 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元素。