有时候,可能只关注含有连接links的元素,因此,在Splinter中,提供了links 命名空间,其下有多个方法可以查找元素。
links_found = browser.links.find_by_text('Link for Example.com') # 通过Text查找(全匹配)(这里的text指的是a标签内的Text)
links_found = browser.links.find_by_partial_text('for Example') # 通过Text查找(部分匹配)(这里的text指的是a标签内的Text)
links_found = browser.links.find_by_href('http://example.com') # 通过链接查找(全匹配)
links_found = browser.links.find_by_partial_href('example') # 通过链接查找(部分匹配)
links_found = browser.find_by_css('.main').links.find_by_text('Link for Example.com')
links_found = browser.find_by_css('.main').links.find_by_partial_text('for Example.com')
links_found = browser.find_by_css('.main').links.find_by_href('http://example.com')
links_found = browser.find_by_css('.main').links.find_by_partial_href('example')
以上的find_*
方法均返回一个列表。可以看出,links
适用适用于browser
对象以及elements
。
点击链接可以按照href、部分href、文本或部分文本的方式。例如:
有个html元素:
<a href="https://www.baidu.com" id="111">Links</a>
可以通过以下几种方式点击该链接,注意如果要点击某个连接,需需要能够完全匹配到,因为Splinter中click_*
方法默认单击的是第一个匹配的link
:
browser.click_link_by_href('https://www.baidu.com') # 通过全部匹配href的方式
browser.click_link_by_partial_href('https://www.baidu') # 通过部分匹配href的方式
browser.click_link_by_text('Links') # 通过全部匹配Text的方式
browser.click_link_by_partial_text('Link') # 通过部分匹配Text的方式
browser.click_link_by_id('111') # 通过id的方式
以上四种方法,调用后会直接跳转到对应的href。
默认选中的是第一个匹配的href。
默认选中的是第一个匹配的href。
默认选中的是第一个匹配的href。
find_*
系列函数均返回一个列表,表示满足条件的元素(不会单击并跳转)。而click_*
方法是找到第一个元素并单击它。举个例子,有个html页面中有两个a
标签:
<a href="https://www.baidu.com" id="111">Link</a>
<a href="https://www.baidu.com" id="222">Link1</a>
以*_by_href
系列函数为例,find_by_href
:
ellist = browser.links.find_by_href('https://www.baidu.com') # 则会返回一个列表,其中包含两个元素
# 如果要单击某个元素可以将其取出来,并调用click(),例如:
ellist.first.click() # 单击第一个
ellist.last.click() # 单击最后一个
而对于click_link_by_href
:
browser.click_link_by_href('https://www.baidu.com')
# 通过全部匹配href的方式并直接单击跳转,仅匹配第一个,其结果相当于:
browser.links.find_by_href('https://www.baidu.com').first.click() # 单击第一个
对于其他几种方法同理,官方推荐find_*
系列方法,毕竟使用click_*
会有局限性,例如:无法单击第二个及以后的link
。