python 有个模块:splinter,其中有个实例方法:find_by().
怎么使用这个方法取到 https://www.so.com 网页上那个搜索按钮呢?
from splinter import Browser
browser = Browser('chrome')
ele = browser.find_by() #这句代码怎么写?
ele.click()
注:搜索按钮的源码如下:
<input type="submit" id="search-button" class="skin-search-button" value="搜索">
ele = browser.find_by_id("search-button")
如上代码可以取到 ele 元素,但我想要的是:怎么使用 find_by()方法取到这个按钮元素.
多谢您回复!
1
Xiaobaixiao 2018-08-24 13:49:53 +08:00
官方文档:
Splinter provides 6 methods for finding elements in the page, one for each selector type: css, xpath, tag, name, id, value, text. Examples: browser.find_by_css('h1') browser.find_by_xpath('//h1') browser.find_by_tag('h1') browser.find_by_name('name') browser.find_by_text('Hello World!') browser.find_by_id('firstheader') browser.find_by_value('query') 楼主哪里看的 find_by()方法? |
2
vtoexsir OP @Xiaobaixiao #1 查看安装文件,相对地址:python-3.6.3\Lib\site-packages\splinter\driver\webdriver\__init__.py
第 363 行: def find_by(self, finder, selector, original_find=None, original_query=None): elements = None end_time = time.time() + self.wait_time func_name = getattr(getattr(finder, _meth_func), _func_name) find_by = original_find or func_name[func_name.rfind('_by_') + 4:] query = original_query or selector while time.time() < end_time: try: elements = finder(selector) if not isinstance(elements, list): elements = [elements] except NoSuchElementException: pass if elements: return ElementList( [self.element_class(element, self) for element in elements], find_by=find_by, query=query) return ElementList([], find_by=find_by, query=query) |
3
Xiaobaixiao 2018-08-24 15:38:50 +08:00
#1 所说的 6 个方法 都是返回这个函数调用的…… ,既然你都懂得看源码了,那按照参数传递进去就行了。
话说为什么不直接使用人家封装好的方法呢 |
4
vtoexsir OP |
5
Xiaobaixiao 2018-08-24 16:48:26 +08:00
@vtoexsir 举个荔枝,当你调用 browser.find_by_css('h1') 的时候,实际是调用 browser.find_by(driver.find_elements_by_css_selector,'h1',original_find="css",original_query=css_selector),
所以如果你打算直接用 find_by(),你要确定 selector 的类型,对照参数传入就是了。 如果说错了,望 dalao 们指正 |