python splinter api整理_python splinter 中文文档-程序员宅基地

技术标签: python  python splinter  

官方文档:Splinter — Splinter 0.10.0 documentation

安装:

pip install splinter

下载驱动(这里是Chrome驱动)

谷歌浏览器驱动地址: https://npm.taobao.org/mirrors/chromedriver/
选择自己浏览器版本对应的驱动,windows选win32下载就行,选错了驱动会报错哦
下载驱动后放入python的安装目录
windows安装目录:
    从开始菜单中找到Anaconda或python => 右键 => 打开文件位置 => 弹出文件夹后 => 右键 => 打开文件位置
直接把驱动放到这个文件夹就行了

from splinter import Browser	# 导入包
browser = Browser()				# 创建一个实例
# if you don’t provide any driver to the Browser function, firefox will be used
# 如果没有提供任何浏览器驱动默认使用火狐浏览器驱动(需安装火狐浏览器)

或者这样使用,退出with自动关闭浏览器

from splinter import Browser
with Browser() as b:
    # stuff using the browser

使用其他驱动创建实例

browser = Browser('chrome')
browser = Browser('firefox')
browser = Browser('zope.testbrowser')

导航到某个URL

browser.visit('http://cobrateam.info')

浏览器窗口管理

# 所有打开的窗口
browser.windows              # all open windows
# 第一个窗口
browser.windows[0]           # the first window
# 名字为window_name值的窗口
browser.windows[window_name] # the window_name window
# 当前窗口
browser.windows.current      # the current window
# 设置第三个窗口为当前窗口
browser.windows.current = browser.windows[3]  # set current window to window 3

window = browser.windows[0]
# 返回一个布尔值表示当前这个窗口对象是否是活动窗口
window.is_current            # boolean - whether window is current active window
# 设置window为当前活动窗口
window.is_current = True     # set this window to be current window
# 获取window的下一个窗口
window.next                  # the next window
# 获取window的上一个窗口
window.prev                  # the previous window
# 关闭这个窗口
window.close()               # close this window
# 关闭其他窗口
window.close_others()        # close all windows except this one

重新加载页面

browser.reload()

跳转历史

browser.visit('http://cobrateam.info')
browser.visit('https://splinter.readthedocs.io')
# 上一个历史记录
browser.back()
# 下一个历史记录
browser.forward()

网页内容操作

# You can get the title of the visited page using the title attribute:
browser.title
# You can use the html attribute to get the html content of the visited page:
browser.html
# The visited page’s url can be accessed by the url attribute:
browser.url
# You can pass a User-Agent header on Browser instantiation.
b = Browser(user_agent="Mozilla/5.0 (iPhone; U; CPU like Mac OS X; en)")

splinter 选择器提供了6个方法来定位页面元素,css, xpath, tag, name, id, value, text.

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')

你可以通过fist、last、index的方式访问选择器返回的元素列表

# Each of these methods returns a list with the found elements.
# You can get the first found element with the first shortcut:
first_found = browser.find_by_name('name').first
# There’s also the last shortcut – obviously, it returns the last found element:
last_found = browser.find_by_name('name').last
# You also can use an index to get the desired element in the list of found elements:
second_found = browser.find_by_name('name')[1]

A web page should have only one id, so the find_by_id method returns always a list with just one element.

寻找超链接的一些方法

#根据描述,即<a>和</a>标签中间的内容,直接做内容匹配
links_found = browser.find_link_by_text('Link for Example.com')
# 不同于上面的这个是做正则匹配
links_found = browser.find_link_by_partial_text('for Example')
# 根据href属性做内容匹配
links_found = browser.find_link_by_href('http://example.com')
# 根据href属性做正则匹配
links_found = browser.find_link_by_partial_href('example')

If an element is not found, the find_ methods return an empty list. But if you try to access an element in this list, the method will raise the splinter.exceptions.ElementDoesNotExist exception.*

对定位到的一些元素的事件触发

# 触发某个元素的点击事件
browser.find_by_tag('h1').click()
# 双击事件
browser.find_by_tag('h1').double_click()
# 右键点击
browser.find_by_tag('h1').right_click()

you can drag an element and drop it to another element! The example below drags the <h1>…</h1> element and drop it to a >container element (identified by a CSS class).

draggable = browser.find_by_tag('h1')
target = browser.find_by_css('.container')
draggable.drag_and_drop(target)

获取元素的值

# method one
browser.find_by_css('h1').first.value
# method two
element = browser.find_by_css('h1').first
element.value

点击一个链接、按钮

# link
browser.click_link_by_href('http://www.the_site.com/my_link')
browser.click_link_by_partial_href('my_link')
browser.click_link_by_text('my link')
browser.click_link_by_partial_text('part of link text')
browser.click_link_by_id('link_id')
#button
browser.find_by_name('send').first.click()
browser.find_link_by_text('my link').first.click()

cookie操作

# 添加
browser.cookies.add({
    'whatever': 'and ever'})
# 获取所有cookie
browser.cookies.all()
# 删除
browser.cookies.delete('mwahahahaha')  # deletes the cookie 'mwahahahaha'
# 删除多个
browser.cookies.delete('whatever', 'wherever')  # deletes two cookies
# 删除所有
browser.cookies.delete()  # deletes all cookies

在实际开发中经常需要等待页面的某些元素加载渲染完成后我们才能进行操作,这里给出一种比较常用的方法

from selenium.webdriver.support.wait import WebDriverWait
WebDriverWait(browser, 20, 0.5).until(
    lambda driver:
    driver.find_link_by_href('https://i.csdn.net')
)

# WebDriverWait:
#   第一个参数是驱动对象
#   第二个参数是最大超时时间
#   第三个参数是每过多久判断一次
# until方法(函数返回 真 时 结束等待,否则继续等待):
#   第一个参数需要一个处理函数(注意不是函数调用不能带括号),该函数接收一个参数——驱动对象,
#   即WebDriverWait在检查调用该函数时会传入驱动对象;这里我传入了一个lambda表达式来判断首页
#   的标志性按钮是否已加载完成

结语:splinter很强大,还有很多api没有整理,请自行去官网查看,链接在这里

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/csdn_meng/article/details/100327425

智能推荐

分糖问题_solo和koko是两兄弟-程序员宅基地

文章浏览阅读5.5k次,点赞6次,收藏22次。问题描述Solo和koko是两兄弟,妈妈给了他们一大袋糖,每块糖上都有自己的重量。现在他们想要将这些糖分成两堆。分糖的任务当然落到了大哥Solo的身上,然而koko要求必须两个人获得的糖的总重量“相等”(根据Koko的逻辑),要不然就会哭的。非常不幸的是,koko还非常小,并且他只会先将两个数转成二进制再进行加法,而且总会忘记进位。如当12(1100)加5(101)时: &nbs..._solo和koko是两兄弟

数据结构与算法学习笔记2:栈和队列_一万个括号-程序员宅基地

文章浏览阅读374次。数据结构与算法学习笔记2栈 stack堆和栈的区别静态变量tips跨文件使用tips:关键字extern指针传递队列 queue队列类型:单端队列:循环队列:**r+1%n**?**循环队列如何判断队列为空or为满?**栈和队列 相关题目括号匹配问题约瑟夫环问题队列和栈的相互转换栈 stack受限线性表先进后出 FILO题外话:堆和栈是内存区域的问题,栈和队列是数据结构的问题,两者没有任何关系。堆和栈的区别申请空间的方式和回收不一样。堆区的空间要向系统申请,malloc和new,_一万个括号

html树状图在线画板,五款在线思维导图工具,总有一款适合你-程序员宅基地

文章浏览阅读1.4k次。原标题:五款在线思维导图工具,总有一款适合你思维导图是表达发散性思维的有效图形思维工具,通过一些主要的关键词,用非线性的方式展现出来。思维导图的真正用处不是让你能直接获得多少多少的好处,它更多的,还是类似于“打通任督二脉”,提供应用于记忆知识点、梳理知识框架、发散性组织写作提纲等多种用途。 以下分享五款思维导图软件,秉着免费,在线的两大原则,适合绝大部分人使用。一.百度脑图百度脑图由百度的程序员开..._树状图工具

机械键盘恢复出厂fn_怎么切换fn恢复f1 - 卡饭网-程序员宅基地

文章浏览阅读4.6k次。键盘如何关闭Fn功能键恢复F1~F12键盘如何关闭Fn功能键恢复F1~F12 [网友建议] 您可以尝试长按Fn键,如果弹出热键设置,您就可以选择传统模式或当前的模式了,您也可以进入电脑的BIOS进行调试:在BIOS设置界面,进入 "Configuration" 菜单,将"Hotkey mode"的设置由Enable更改为Disable,然后按F10保存后退出即可. [百度经验以联想为例]...键盘..._机械键盘怎么恢复出厂设置

numpy.arctan详解_np.arctan-程序员宅基地

文章浏览阅读2.8w次,点赞7次,收藏16次。numpy.arctan用例:numpy.arctan(x, /, out=None, *, where=True, casting=‘same_kind’, order=‘K’, dtype=None, subok=True[, signature, extobj]) = <ufunc ‘arctan’>功能:对数组中的每一个元素求其反正切值。它是正切函数的反函数,所..._np.arctan

【蓝桥杯选拔赛真题30】C++字母转换 第十三届蓝桥杯青少年创意编程大赛C++编程选拔赛真题解析-程序员宅基地

文章浏览阅读306次。C/C++字母转换第十三届蓝桥杯青少年创意编程大赛C++选拔赛真题一、题目要求1、编程实现给定一个大写字母,输出其对应的小写字母2、输入输出输入描述:只有一行,输入一个大写字母输出描述:只有一行,输出大写字母对应的小写字母输入样例:A输出样例:a二、算法分析

随便推点

Visual Studio 2008简体中文试用版(90天)变成永久正式版的两种方法-程序员宅基地

文章浏览阅读176次。Visual Studio 2008简体中文试用版(90天)变成永久正式版的两种方法: 一、先安装试用版,然后在“添加或删除程序”里找到VS2008,点“更改/删除”就会看到一个输入序列号的地方,把序列号输进去,点“升级”按钮即可,Team Suite和Professional通用。 二、用UltraISO打开VS的ISO安装文件,把Setup\setup.sdb文件解压缩出来,一定记得..._xmq2y4t3v6xj48yd3k2v6c4wt

Ubuntu Server内核优化提高并发_ubuntu server 系统优化-程序员宅基地

文章浏览阅读3.1k次。设置文件打开句柄数# 查看系统默认的值ulimit -n# 设置最大打开文件数ulimit -n 1000000这样只能在当前 shell 中有效。通过修改配置文件的方式修改程序最大打开句柄数可以永久有效:sudo vim /etc/security/limits.confroot soft nofile 1040000root hard nofile 1040000..._ubuntu server 系统优化

【考研数学】零基础跟「张宇」的几点体会-程序员宅基地

文章浏览阅读302次,点赞3次,收藏8次。(比如我也听了武忠祥老师的课,不得不说某些方法确实让人拍手叫绝,但是一看题呢,该不会的还是不会。这些阶段如果保质保量的完成,在考试里大致对应的分数是 0,80,120,130。但很多人不知道展开到几项,哪些是可以扔掉的,把很简单的题算得很复杂,有的还背了很多不必要的技巧,纯属浪费时间。入门,基础,强化,是递进关系,不能越级!综测会一直持续到备考结束,也就是说将近一年的时间里,它都会通过滚动复习,让你持续保持火热的手感~真的是保姆级了!根据你自己的薄弱低点,针对性地练,哪里不会练哪里,才能吃透,而且省时间。

【翻译+理解】Channel Access Protocal——EPICS Base-3.16版CA协议 - 基本概念_epics ca协议-程序员宅基地

文章浏览阅读2k次。参考文献:1. 官方CA协议说明 https://epics.anl.gov/base/R3-16/1-docs/CAproto/index.html#_concepts(本翻译的原文)2. EPICS培训PPT EPICS_Introduction_PSI2011.ppt https://download.csdn.net/download/u013894429/10823381(找不到..._epics ca协议

基于java和微信小程序的 点餐外卖小程序-后台Java 毕业设计毕设源码最终作品_java外卖小程序源码-程序员宅基地

文章浏览阅读2.2k次,点赞3次,收藏13次。微信小程序在线点餐外卖系统主要包含功能:微信登录、普通用户注册和登录、用户信息修改、用户密码修改;用户首页、菜品分类、产品浏览、增加数量、减少数量、订餐、收藏、地址管理、评论、广告设置等;提供项目源代码(小程序+接口+后台)。开发工具:IDEA2020开发环境:JDK1.8 +Tomcat8数据库:Mysql8小程序后台..._java外卖小程序源码

jqGrid用法及增删改查方法_jqgrid 列表增删改查-程序员宅基地

文章浏览阅读3.5k次。jquery grid是富客户端的,基于XML , Ajax网格插件的jQuery库。 jqGridView提供专业的解决方案,代表和编辑表格数据在网络上。精心设计的,具有强大的脚本API的,这可编辑网格是很简单的DHTML与XML 的配置,并显示出令人信服的成果与大量数据。现在我现在熟悉一下jquery grid的的使用方法和一些常用的option设置。1.调用gridjqGrid已经可_jqgrid 列表增删改查

推荐文章

热门文章

相关标签