1

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

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

...br我的浏览器实例在哪里。

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

这是该元素的屏幕截图。

这是我正在尝试操作的元素的屏幕截图

抱歉截图有点烂。

有人对这个有经验么?

4

3 回答 3

3

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
于 2014-03-04T21:46:36.463 回答
1

我正在做类似的事情,我试图点击网页上的东西。find_by_css()的文档很差,您需要键入要单击的元素的 css 路径。 假设我们要点击 python.org 上的 about 页面 假设我们要转到 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)

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

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

于 2014-12-16T01:53:46.250 回答
0

我喜欢 CSS 选择参数的 W3Schools 参考: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() 。

于 2015-02-05T04:43:50.763 回答