怎么使用 splinter 模块的 find_by()方法来获取 360 搜索主页上的'搜索按钮'元素?

2018-08-24 13:32:06 +08:00
 vtoexsir

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()方法取到这个按钮元素.
多谢您回复!

3290 次点击
所在节点    Python
5 条回复
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()方法?
vtoexsir
2018-08-24 15:10:44 +08:00
@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)
Xiaobaixiao
2018-08-24 15:38:50 +08:00
#1 所说的 6 个方法 都是返回这个函数调用的…… ,既然你都懂得看源码了,那按照参数传递进去就行了。
话说为什么不直接使用人家封装好的方法呢
vtoexsir
2018-08-24 15:52:33 +08:00
@Xiaobaixiao #3 我一瓶不满半瓶晃荡!!!
就是不知道 find_by 方法的各个参数怎么写?
所以来提问,求个实例代码的!
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 们指正

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/482847

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX