我正在尝试从教育部下载一个文件,这是目前为止我的完整代码:
from splinter import Browser
import time
br = Browser()
br.visit('http://nces.ed.gov/ipeds/cipcode/resources.aspx?y=55')
br.find_by_xpath('//*[id@"ct100_ct100_CIPContent_ContentPlaceHolder1_LinkButton_FINALCIPtoSOCcrosswalk"]').click()
# give myself a delay to visually inspect that it's working
time.sleep(5)
br.quit()
这是我得到的完整的回溯
File "crosswalksplinter.py", line 9, in <module>
br.find_by_xpath('//*[id@"ct100_ct100_CIPContent_ContentPlaceHolder1_LinkButton_FINALCIPtoSOCcrosswalk"]').click()
File "/usr/lib/python2.6/site-packages/splinter/element_list.py", line 75, in __getattr__
self.__class__.__name__, name))
AttributeError: 'ElementList' object has no attribute 'click'
我之前"点击"过其他类似的链接,所以我不确定这次的问题是什么。有人知道为什么我得到这个错误,如果有一个方法绕过它吗?
根据错误消息,看起来从br.find_by_xpath
返回的东西是一个列表,而不是单个元素。splinter docs
确认了这一点:
Splinter提供了6种方法来查找页面中的元素,每种选择器类型各一个:css、xpath、标签、名称、id、值. ...这些方法中的每一个都返回一个包含找到的元素的列表。
它还说:
您可以使用第一个快捷方式获得第一个找到的元素:
first_found = browser.find_by_name('name').first
试着像这样点击第一个元素:
br.find_by_xpath('//*[id@"ct100_ct100_CIPContent_ContentPlaceHolder1_LinkButton_FINALCIPtoSOCcrosswalk"]').first.click()
或者使用列表索引:
br.find_by_xpath('//*[id@"ct100_ct100_CIPContent_ContentPlaceHolder1_LinkButton_FINALCIPtoSOCcrosswalk"]')[0].click()