【问题标题】:Python Splinter clicking button CSSPython Splinter 点击按钮 CSS
【发布时间】:2014-04-06 15:54:52
【问题描述】:

我在使用 find_by_css 方法在 Splinter 脚本中选择按钮时遇到问题。文档充其量是稀疏的,而且我还没有找到很多带有示例的好文章。

br.find_by_css('div#edit-field-download-files-und-0 a.button.launcher').first.click()

...br 是我的浏览器实例。

我尝试了几种不同的编写方式。我真的不确定我应该怎么做,因为文档没有给出任何语法的硬性示例。

这是元素的屏幕截图。

抱歉截图有点烂。

有人有这方面的经验吗?

【问题讨论】:

    标签: python selenium splinter


    【解决方案1】:

    css 选择器看起来不错,只是我不确定你从哪里得到find_by_css 作为方法?

    这个怎么样:-

    br.find_element_by_css_selector("div#edit-field-download-files-und-0 a.button.launcher").click()
    

    Selenium 提供以下方法来定位页面中的元素:

    find_element_by_id
    find_element_by_name
    find_element_by_xpath
    find_element_by_link_text
    find_element_by_partial_link_text
    find_element_by_tag_name
    find_element_by_class_name
    find_element_by_css_selector
    

    查找多个元素(这些方法将返回一个列表):

    find_elements_by_name
    find_elements_by_xpath
    find_elements_by_link_text
    find_elements_by_partial_link_text
    find_elements_by_tag_name
    find_elements_by_class_name
    find_elements_by_css_selector
    

    【讨论】:

    • find_by_css 是 Splinter 库中的一种方法,似乎与 Selenium 结合使用。
    【解决方案2】:

    我正在做类似的事情,我试图点击网页上的东西。 find_by_css() 的文档很差,您需要键入要单击的元素的 css 路径。 假设我们要转到 python.org 上的 about 选项卡

    from splinter import Browser
    from time import sleep
    with Browser() as browser: #<--Create browser instance (firefox default driver)
        browser.visit('http://www.python.org') #<--Visits url string
        browser.find_by_css('#about > a').click()
        #                       ^--Put css path here in quotes
        sleep(5)
    

    如果您的连接良好,您可能没有机会看到点击了 about 选项卡,但您应该最终会出现在 about 页面上。

    最困难的部分是找出元素的 css 路径。但是一旦你有了它,find_by_css() 方法看起来很简单

    【讨论】:

      【解决方案3】:

      我喜欢 W3Schools 的 CSS 选择参数参考:http://www.w3schools.com/cssref/css_selectors.asp

      至于您的代码...我建议至少在调试期间将其分解为几个步骤。对 br.find_by_css('css_string') 的调用返回一个元素列表。因此,您可以获取该列表并检查计数。

      elems = br.find_by_css('div#edit-field-download-files-und-0 a.button.launcher')
      if len(elems) == 1:
          elems.first.click()
      

      如果您不检查返回列表的长度并在空列表上调用“.first”,则会出现异常。如果 len > 1,您可能会得到意想不到的结果。

      页面上的每个 id 都是唯一的,您可以进行菊花链搜索,因此您可以使用几种不同的语句来实现这一点:

        id_elems = br.find_by_id('edit-field-download-files-und-0')
        if id_elems:
            id_elem = id_elems.first
            a_elems = id_elem.find_by_tag("a")
            for e in a_elems:
                if e.has_class("button launcher"):
                    print('Found it!')
                    e.click()
      

      当然,这只是众多方法中的一种。 最后,Splinter 是 Selenium 和其他网络驱动程序的包装器。有可能,即使您找到要单击的元素,实际单击也不会执行任何操作。如果发生这种情况,您也可以尝试单击包装的 Selenium 对象,该对象以 e._element 的形式提供。因此,如有必要,您可以尝试 e._element.click()。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-02-16
        • 2016-05-08
        • 2021-09-14
        • 2018-05-11
        • 1970-01-01
        相关资源
        最近更新 更多