Splinter:选择正确的按钮

时间:2015-10-09 04:43:13

标签: python splinter

我正在尝试自动登录网站,以便从气象站检索信息。登录页面位于http://www.lacrossealertsmobile.com/v1.2/#userLogin

当我查看源代码时,我看到几行说

<button type="submit" class="btn btn-default">Submit</button>

我想在访问上面的页面时选择显示登录页面的按钮。登录的代码部分是

<div data-role="page" id="userLogin">
    <div data-role="header">
        <h1>Login</h1>
    </div>
    <div class="logo-container">
        <div class="logo-banner"></div>
    </div>
    <div class="container">
        <div class="row list-group-item active">
            <div class="col-md-12">
              <h4 class="text-center" style="font-weight: 500; margin:5px;">User Login</h4>
            </div>
        </div>
        <div class="row">
            <div class="col-md-12" style="font-size:1.2em;">
                <form role="form" id="formLogin" style="margin: 10px 0;">
                    <div class="form-group">
                        <label for="exampleInputEmail1">User Name (email address)</label>
                        <input type="text" class="form-control" id="iLogEmail" placeholder="Email" required>
                    </div>
                    <div class="form-group">
                        <label for="exampleInputPassword1">Password</label>
                        <input type="password" class="form-control" id="iLogPass" placeholder="Password" required>
                    </div>
                    <div class="form-group text-center">
                        <div class="bs-callout bs-callout-warning" id="userLogin-warning" style="display:none;">warning text</div>
                    </div>
                    <button type="submit" class="btn btn-default">Submit</button>
                </form>
                <br>
            </div> 
        </div>
        <div class="row list-group-item list-group-item-success" id="newUserDiv">
            <div class="col-md-12">
              <h4 class="text-center" style="font-weight: 300; margin:5px;">New Users - Click here to get started</h4>
            </div>
        </div>
    </div>
</div>

Splinter文档说

  

查找方法是可链接的,因此您可以找到以前找到的元素的后代。

所以我试着用以下方法做到这一点:

login = browser.find_by_id('userLogin')
login.first.find_by_text('Submit')

我正在尝试这样做以便找到&#34;提交&#34;在登录部分,然后我希望我可以修改代码

login.first.find_by_text('Submit')[0].click()

这不起作用。我最终发现它是因为上面的元素[0]是不可见的。通过反复试验,我发现可见按钮,我想要的按钮是元素[5]。事实上,我的链式搜索似乎没有按照我的想法进行。下面的2个搜索返回找到的对象的不同地址,但在任何一种情况下,元素[5]都映射到显示的表单上的“提交”按钮

>>> login.first.find_by_text('Submit')
[<splinter.driver.webdriver.WebDriverElement object at 0x03320FF0>, <splinter.driver.webdriver.WebDriverElement object at 0x033AD170>, <splinter.driver.webdriver.WebDriverElement object at 0x033AD1B0>, <splinter.driver.webdriver.WebDriverElement object at 0x033AD210>, <splinter.driver.webdriver.WebDriverElement object at 0x033AD250>, <splinter.driver.webdriver.WebDriverElement object at 0x033AD290>, <splinter.driver.webdriver.WebDriverElement object at 0x033AD2D0>, <splinter.driver.webdriver.WebDriverElement object at 0x033AD310>]
>>> browser.find_by_text('Submit')
[<splinter.driver.webdriver.WebDriverElement object at 0x0326CEB0>, <splinter.driver.webdriver.WebDriverElement object at 0x0326C590>, <splinter.driver.webdriver.WebDriverElement object at 0x033200F0>, <splinter.driver.webdriver.WebDriverElement object at 0x033209B0>, <splinter.driver.webdriver.WebDriverElement object at 0x033201B0>, <splinter.driver.webdriver.WebDriverElement object at 0x03320190>, <splinter.driver.webdriver.WebDriverElement object at 0x033207D0>, <splinter.driver.webdriver.WebDriverElement object at 0x033AD350>]

所以我的问题是为什么链式搜索没有返回&#34; userLogin&#34;的后代,这是我想要的提交按钮?

1 个答案:

答案 0 :(得分:0)

原因可能是因为它不是您使用该ID找到的对象的直接后代。

或者,您可以使用Absolute Xpath通过Xpath找到它,或者尝试在DOM中直接使用它上面的对象。