从键字列表中返回值列表,其中键等于某个值

时间:2017-02-24 09:09:50

标签: python selenium beautifulsoup

<div id="tabs" class="clearfix">
    <ul id="remove">
        <li class="btn_arrow_tab left inactive">
            <a href="#" class="doubleText">Pay Monthly <small>View standard rates and Bolt Ons</small>
            </a>
        </li>
        <li class="btn_arrow_tab right inactive">
            <a href="#" class="doubleText">Pay &amp; Go<small>View standard rates and Bolt Ons</small>
            </a>
        </li>
    </ul>
</div>

我没有网络抓取的经验,并且尝试按照示例和文档点击按钮,文字为“每月付费”。然后,此按钮会动态显示我需要复制的一些文本。如何为初学者单击此选项,然后阅读显示的文本。我正在尝试与Selenium,美丽汤会更好吗?我一直在尝试这行代码,但它没有做任何事情:

driver.find_element_by_xpath("//a[text()[contains(.,'Pay Monthly')]]").click()

1 个答案:

答案 0 :(得分:0)

使用绝对和相对xpath的混合来定位元素总是好的做法。

您应该找到的第一件事是具有唯一标识符的父级。您提到的元素有两个具有静态ID的父项。一个是根div,另一个是ul

现在我们可以按照您的路径使用Text查找元素。以下任何一项都可以使用。

driver.find_element_by_xpath("//div[@id='tabs']//a[text()[contains(.,'Pay Monthly')]]").click()
driver.find_element_by_xpath("//ul[@id='remove']//a[text()[contains(.,'Pay Monthly')]]").click()

但是,如果该项目是静态元素并考虑到您的目标,我会建议以下方法。在返回多个元素时索引xpath。

myElement = driver.find_element_by_xpath("//div[@id='tabs']//a[@href='#'][1]")
myElement.click()

然后你可以捕获文本。您可以放置​​一些wait以确保文本更改。

myText = myElement.text

如果这不起作用,请告诉我。