我喜欢 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() 。