hon

阅读 / 问答 / 标签

python数据分析师需要掌握什么技能?

首先是基础篇1、首先是Excel,貌似这个很简单,其实未必。Excel不仅能够做简单二维表、复杂嵌套表,能画折线图/Column chart/Bar chart/Area chart/饼图/雷达图/Combo char/散点图/Win Loss图等,而且能实现更高级的功能,包括透视表(类似于BI的多维分析模型Cube),以及Vlookup等复杂函数,处理100万条以内的数据没有大问题。最后,很多更高级的工具都有Excel插件,例如一些AI Machine Learning的开发工具。2. SQL(数据库)我们都知道数据分析师每天都会处理海量的数据,这些数据来源于数据库,那么怎么从数据库取数据?如何建立两表、三表之间的关系?怎么取到自己想要的特定的数据?等等这些数据选择问题就是你首要考虑的问题,而这些问题都是通过SQL解决的,所以SQL是数据分析的最基础的技能。3. 统计学基础数据分析的前提要对数据有感知,数据如何收集?数据整体分布是怎样的?如果有时间维度的话随着时间的变化是怎样的?数据的平均值是什么?数据的最大值最小值指什么?数据相关与回归、时间序列分析和预测等等。4、掌握可视化工具,比如BI,如Cognos/Tableau/FineBI等,具体看企业用什么工具,像我之前用的是FineBI。这些工具做可视化非常方便,特别是分析报告能含这些图,一定会吸引高层领导的眼球,一目了然了解,洞察业务的本质。另外,作为专业的分析师,用多维分析模型Cube能够方便地自定义报表,效率大大提升。进阶阶段需要掌握的:1、系统的学好统计学纯粹的机器学习讲究算法预测能力和实现,但是统计一直就强调“可解释性”。比如说,针对今天微博股票发行就上升20%,你把你的两个预测股票上涨还是下跌的model套在新浪的例子上,然后给你的上司看。统计学就是这样的作用。数据挖掘相关的统计方法(多元Logistic回归分析、非线性回归分析、判别分析等)定量方法(时间轴分析、概率模型、优化)决策分析(多目的决策分析、决策树、影响图、敏感性分析)树立竞争优势的分析(通过项目和成功案例学习基本的分析理念)数据库入门(数据模型、数据库设计)预测分析(时间轴分析、主成分分析、非参数回归、统计流程控制)数据管理(ETL(Extract、Transform、Load)、数据治理、管理责任、元数据)优化与启发(整数计划法、非线性计划法、局部探索法、超启发(模拟退火、遗传算法))大数据分析(非结构化数据概念的学习、MapReduce技术、大数据分析方法)数据挖掘(聚类(k-means法、分割法)、关联性规则、因子分析、存活时间分析)其他,以下任选两门(社交网络、文本分析、Web分析、财务分析、服务业中的分析、能源、健康医疗、供应链管理、综合营销沟通中的概率模型)风险分析与运营分析的计算机模拟软件层面的分析学(组织层面的分析课题、IT与业务用户、变革管理、数据课题、结果的展现与传达方法)2、掌握AI Machine Learning算法,会用工具(比如Python/R)进行建模。传统的BI分析能回答过去发生了什么?现在正在发生什么?但对于未来会发生什么?必须靠算法。虽然像Tableau、FineBI等自助式BI已经内置了一部分分析模型,但是分析师想要更全面更深度的探索,需要像Python/R的数据挖掘工具。另外大数据之间隐藏的关系,靠传统工具人工分析是不可能做到的,这时候交由算法去实现,无疑会有更多的惊喜。其中,面向统计分析的开源编程语言及其运行环境“R”备受瞩目。R的强项不仅在于其包含了丰富的统计分析库,而且具备将结果进行可视化的高品质图表生成功能,并可以通过简单的命令来运行。此外,它还具备称为CRAN(The Comprehensive R Archive Network)的包扩展机制,通过导入扩展包就可以使用标准状态下所不支持的函数和数据集。R语言虽然功能强大,但是学习曲线较为陡峭,个人建议从python入手,拥有丰富的statistical libraries,NumPy ,SciPy.org ,Python Data Analysis Library,matplotlib: python plotting。以上我的回答希望对你有所帮助

选股策略回测用 Matlab 好还是用 Python 好

首先十年的日级别数据量的确不大,使用Python来说的话不应该出现memoryerror,应该是在编程方面需要再多留意,我们在Ricequant上使用的分钟数据大概是200-300个GB左右,也是Python和Java共同合作完成的。语言只是一个语言,兴许会有各种语法的不同,但是在谈语言的时候我们需要了解背后的工具箱和社区,以及它为什么处理一些事情比另外的一些语言要好。本身Python初期用来做金融回测等是应该被放弃的,用来开发策略也应该是被放弃的,因为相比matlab的矩阵运算来做开发,实在是太方便了。只不过后来Python推出了series、pandas等一系列的强悍library,pandas的语法基本在“无耻”地模仿matlab和R,而pandas的开发者正是美国大名鼎鼎的对冲基金AQR,因此使data crunching和对数据的一些操作大大便利,此外,又包装了海量的开源社区的数学和科学计算库,也能处理各种的machin learning等等的问题。从科学计算的语言的发展来看,从最初的人们对浮点数计算的需求加入了fortran,再一路进行,让工具更加的让科学计算容易再容易(Python也封装了大量早期的数学家们用fortran写的数学计算基础库,这些经历了几十年的考验、加速等等):我们来看下python目前的科学技术栈:numpy: basic array manipulation - 基础的数组处理scipy: scientific computing in python, including signal processing and optimization - 科学计算,包括信号处理和优化等matplotlib: visualization and plotting - 几行代码就可以做图形化显示了IPython: write and run python code interactively in a shell or a notebook - 互动式编程环境,这是能将来替代掉matlab的一个必备,即在一行一行代码的输入、显示过程中学习、改进pandas: data manipulation - 最重要的矩阵运算等scikit-learn: machine learning - 机器学习但是随着以后的发展Python的开源属性就会体现的越来越强大,可以让更多的人享受到其便利和贡献进来,包括Quantopian也放出了zipline的python回测框架,只需要引入yahoo数据即可进行回测,并且Python的速度由于跟C的很好的结合可以达到非常快的速度,而且可以将来和其他系统很容易整合对接实盘交易接口。由于欧美已经有很多的投行和对冲基金在往Python的技术栈靠拢,因此选择了Python即掌握了一门重要的工具,并且无需跟一家私有化公司进行捆绑。当然,最后的最后,所有的python回测你都可以来Ricequant - Beta上完成,我们支持海量的市场、财务数据,还有不断加入的和大数据公司合作的舆情数据等等,同时策略回测完还可以做实时模拟交易,享受到实时数据的计算。在云平台上已经支持了几乎所有的Python科学计算库,无需花时间安装、测试等等。

如何用python实现piv测速

您好,PIV全名:Particle Image Velocimetry,又称粒子图像测速法,是七十年代末发展起来的一种瞬态、多点、无接触式的激光流体力学测速方法。PIV忙说白了就是测速仪繁忙

为什么python plt.plot 画图起点不是零点

a=[0,1,2,3,4]b=[0,1,2,3,4]plt.plot(a,b,"o")plt.show()

Python 中的可视化工具介绍

几周前,R语言社区经历了一场关于画图工具的讨论。对于我们这种外人来说,具体的细节并不重要,但是我们可以将一些有用的观点运用到 Python 中。讨论的重点是 R 语言自带的绘图工具 base R 和 Hadley Wickham 开发的绘图工具 ggplot2 之间的优劣情况。如果你想了解更多细节内容,请阅读以下几篇文章: 其中最重要的两个内容是: 不是所有人都认同第二个观点,ggplot2确实无法绘制出所有的图表类型,但是我会利用它来做分析。 以下是 2016 年 4 月写的关于绘图工具的概述。出于多方面的原因,绘图工具的选取更多地取决于个人偏好,因此本文介绍的 Python 绘图工具也仅代表我的个人使用偏好。 Matplotlib 是一个强大的工具,它是 Pandas" builtin-plotting 和 Seaborn 的基础。 Matplotlib 能够绘制许多不同的图形,还能调用多个级别的许多 API 。我发现 pyplot api 非常好用,你可能用不上 Transforms 或者 artists ,但是如果你有需求的话可以查阅帮助文档。我将从 pandas 和 seaborn 图开始介绍,然后介绍如何调用 pyplot 的 API 。 DataFrame 和 Series 拥有 .plot 的命名空间,其中有许多图形类别可供选择(line, hist, scatter, 等等)。 Pandas 对象还提供了额外的用于增强图形展现效果的数据,如索引变量。 由于 pandas 具有更少的向后兼容的限制,所以它具有更好的美学特性。从这方面来说,我认为 pandas 中的 DataFrame.plot 是一个非常实用的快速探索性分析的工具。 Michael Waskom 所开发的 Seaborn 提供了一个高层次的界面来绘制更吸引人统计图形。 Seaborn 提供了一个可以快速探索分析数据不同特征的 API 接口,接下来我们将重点介绍它。 Bokeh 是一款针对浏览器开发的可视化工具。 和 matplotlib 一样,**Bokeh ** 拥有一系列 API 接口。比如 glpyhs 接口,该接口和 matplotllib 中的 Artists 接口非常相似,它主要用于绘制环形图、方形图和多边形图等。最近 Bokeh 又开放了一个新的图形接口,该接口主要用于处理词典数据或 DataFrame 数据,并用于绘制罐头图。 以下是一些本文没有提到的可视化工具: 我们将利用 ggplot2 中的 diamonds 数据集,你可以在 Vincent Arelbundock"s RDatasets 中找到它(pd.read_csv(" http://vincentarelbundock.github.io/Rdatasets/csv/ggplot2/diamonds.csv") ),此外我们还需要检测是否已经安装 feather 。 [站外图片上传中……(4)] Bokeh 提供了两个 API,一个是低级的 glyph API,另一个是高级的 Charts API。 [站外图片上传中……(5)] 还不是很清楚我们应该在啥时候利用 Bokeh 来进行探索性分析,不过它的交互式功能可以激发我的兴趣。就个人而言,由于习惯问题我平时仍然一直使用 matplotlib 来绘图,我还无法完全切换到 Bokeh 中。 我非常喜欢 Bokeh 的仪表盘功能和 bokeh server 的 webapps。 [站外图片上传中……(6)] [站外图片上传中……(7)] [站外图片上传中……(8)] matplotlib 并不局限于处理 DataFrame 数据,它支持所有使用 getitem 作为键值的数据类型。 [站外图片上传中……(9)] [站外图片上传中……(10)] 我们从列变量的名字中提取出轴标签,利用 Pandas 可以更加便捷地绘制一系列共享 x 轴数据的图形。 [站外图片上传中……(11)] [站外图片上传中……(12)] 本文中的剩余部分将重点介绍 seaborn和为什么我认为它是探索性分析的强大工具。 我强烈建议你阅读 Seaborn 的 introductory notes,这上面介绍了 seaborn 的设计逻辑和应用领域。 我们可以通过一个稳定的且易懂的 API 接口来调用 Seaborn。 事实上,seaborn 是基于 matplotlib 开发的,这意味着如果你熟悉 pyplot API的话,那么你可以很容易地掌握 seaborn。 大多数 seaborn 绘图函数的参数都由 x, y, hue, 和 data 构成(并不是所有的参数都是必须的)。如果你处理的对象是 DataFrame,那么你可以直接将列变量的名称和数据集的名称一同传递到绘图函数中。 [站外图片上传中……(13)] [站外图片上传中……(14)] [站外图片上传中……(15)] [站外图片上传中……(16)] 我们可以很轻易地探究两个变量之间的关系: [站外图片上传中……(17)] [站外图片上传中……(18)] 或者一次探究多个变量之间的关系: [站外图片上传中……(19)] [站外图片上传中……(20)] pariplot 是 PairGrid 的一个包装函数,它提供了 seaborn 一个重要的抽象功能——Grid。Seaborn 的 Grid 将 matplotlib 中Figure 和数据集中的变量联系起来了。 我们有两种方式可以和 grids 进行交互操作。其一,seaborn 提供了类似于 pairplot 的包装函数,它提前设置了许多常见任务的参数;其二,如果你需要更多的自定义选项,那么你可以直接利用 Grid 方法。 [站外图片上传中……(21)] [站外图片上传中……(22)] [站外图片上传中……(23)] 34312 rows × 7 columns [站外图片上传中……(24)] [站外图片上传中……(25)] FaceGrid 可以通过控制分面变量来生成 Grid图形,其中PairGrid是它的一个特例。接下来的案例中,我们将以数据集中的 cut 变量为分面变量来绘制图像: [站外图片上传中……(26)] [站外图片上传中……(27)] 最后一个案例展示了如何将 seaborn 和 matplotlib 结合起来。g.axes是matplotlib.Axes的一个数组,g.fig是matplotlib.Figure的一个特例。这是使用 seaborn 时常见的一个模式:利用 seaborn 的方法来绘制图像,然后再利用 matplotlib 来调整细节部分。 我认为 seaborn 之所以吸引人是因为它的绘图语法具有很强的灵活性。你不会被作者所设定的图表类型所局限住,你可以根据自己的需要创建新的图表。 [站外图片上传中……(28)] [站外图片上传中……(29)] [站外图片上传中……(30)] [站外图片上传中……(31)] 本来,我打算准备更多的例子来介绍 seaborn,但是我会将相关链接分享给大家。Seaborn 的说明文档写的非常详细。 最后,我们将结合 scikit-learn 来介绍如何利用 GridSearch 来寻找最佳参数。 [站外图片上传中……(32)] [站外图片上传中……(33)] [站外图片上传中……(34)] 原文链接: http://tomaugspurger.github.io/modern-6-visualization.html 译者:Fibears

Python 从键盘输入5个英文单词,输出以元音字母开头的单词?

代码:import reprint(" ".join(re.findall(r"[aeiou]w*",input(),re.I)))截图:

如果Python的源代码无法保密,那不是说所有的算法大伙都可以用?

Python鼓励开源,一定要加密也是可以的,比如做win桌面软件,打包成exe就可以做封装处理的。但现在的软件大都以BS为主,客户看到的只是数据展示,也就是常说的前端。逻辑都在服务上处理,用户一样是看不到的。

星之卡比如何在iphone上可以玩? 星之卡比有出ios版本吗?

没有的

python中的python shell和untitled有什么不同

python shell是交互式窗口untitled的那个是写PYTHON代码并保存成文件用的

iphone 13左上角有untitled是什么意思,怎么解决?

这个是标志吧!

marathon可数么

有“马拉松比赛”的意思 可数take part in a marathon

Marathon (race)是什么意思?

马拉松(赛).

woaizhongyi888 自称陈医生的这个人,说他的方法可以一个月长高几厘米,这个人是骗子吧?

一看就是假的呀

marathon翻译成中文

马拉松。marathon,英文单词,名词、形容词、动词,作名词时意为“马拉松赛跑;耐力的考验”,作形容词时意为“马拉松式的;有耐力的”,作动词时意为“参加马拉松赛跑”。短语搭配:half marathon 半程马拉松 ; 半马拉松 ; 马拉松Marathon Oil 马拉松石油 ; 马拉松石油公司 ; 马拉松油料 ; 美国马拉松石油公司Marathon County 马拉松县Shopping Marathon 购物马拉松 ; 可爱美眉购物狂Sundown Marathon 新加坡日落马拉松 ; 日落马拉松 ; 举行的夜间马拉松赛Marathon Field 马拉松大地Honolulu Marathon 马拉松 ; 火奴鲁鲁马拉松marathon start 马拉松起点双语例句On her second marathon, en route to Portland, she fractured a bone in her foot.在她第二次参加马拉松时,在跑向波特兰的路上,她摔断了腿骨。That"s why we have to have the patience for this marathon rather than a sprint.这就是为什么我们必须有跑马拉松的耐心,而不是想进行一个冲刺。You start by running 5 km, move up to a 10 km, then a half marathon.你可以先跑5公里,接着加到10公里,然后加到马拉松比赛的一半路程。

实例详解Python+SlackAPI如何实现聊天机器人

聊天机器人(Bot) 是一种像 Slack 一样的实用的互动聊天服务方式。如果你之前从来没有建立过聊天机器人,那么这篇文章提供了一个简单的入门指南,告诉你如何用 Python 结合 Slack API 建立你第一个聊天机器人。我们通过搭建你的开发环境, 获得一个 Slack API 的聊天机器人令牌,并用 Pyhon 开发一个简单聊天机器人。我们所需的工具我们的聊天机器人我们将它称作为“StarterBot”,它需要 Python 和 Slack API。要运行我们的 Python 代码,我们需要:Python 2 或者 Python 3pip 和 virtualenv 来处理 Python 应用程序依赖关系一个可以访问 API 的免费 Slack 账号,或者你可以注册一个 Slack Developer Hangout team。通过 Slack 团队建立的官方 Python Slack 客户端代码库Slack API 测试令牌当你在本教程中进行构建时,Slack API 文档 是很有用的。本教程中所有的代码都放在 slack-starterbot 公共库里,并以 MIT 许可证开源。搭建我们的环境我们现在已经知道我们的项目需要什么样的工具,因此让我们来搭建我们所的开发环境吧。首先到终端上(或者 Windows 上的命令提示符)并且切换到你想要存储这个项目的目录。在那个目录里,创建一个新的 virtualenv 以便和其他的 Python 项目相隔离我们的应用程序依赖关系。激活 virtualenv:你的提示符现在应该看起来如截图:已经激活的starterbot的virtualenv的命令提示符这个官方的 slack 客户端 API 帮助库是由 Slack 建立的,它可以通过 Slack 通道发送和接收消息。通过这个pip 命令安装 slackclient 库:当 pip 命令完成时,你应该看到类似这样的输出,并返回提示符。在已经激活的virtualenv用pip安装slackclient的输出我们也需要为我们的Slack项目获得一个访问令牌,以便我们的聊天机器人可以用它来连接到Slack API。Slack 实时消息传递(RTM)APISlack 允许程序通过一个 Web API 来访问他们的消息传递通道。去这个 Slack Web API 页面 注册建立你自己的 Slack 项目。你也可以登录一个你拥有管理权限的已有账号。使用 Web API页面的右上角登录按钮登录后你会到达 聊天机器人用户页面。定制聊天机器人用户页面给你的聊天机器人起名为“starterbot”然后点击 “Add bot integration” 按钮。添加一个bot integration 并起名为“starterbot”这个页面将重新加载,你将看到一个新生成的访问令牌。你还可以将标志改成你自己设计的。例如我给的这个“Full Stack Python”标志。为你的新 Slack 聊天机器人复制和粘贴访问令牌在页面底部点击“Save Integration”按钮。你的聊天机器人现在已经准备好连接 Slack API。Python 开发人员的一个常见的做法是以环境变量输出秘密令牌。输出的Slack令牌名字为SLACK_BOT_TOKEN:好了,我们现在得到了将这个 Slack API 用作聊天机器人的授权。我们建立聊天机器人还需要更多信息:我们的聊天机器人的 ID。接下来我们将会写一个简短的脚本,从 Slack API 获得该 ID。获得我们聊天机器人的 ID这是最后写一些 Python 代码的时候了! 我们编写一个简短的 Python 脚本获得 StarterBot 的 ID 来热身一下。这个 ID 基于 Slack 项目而不同。我们需要该ID,当解析从Slack RTM上发给StarterBot的消息时,它用于对我们的应用验明正身。我们的脚本也会测试我们SLACK_BOT_TOKEN环境变量是否设置正确。建立一个命名为printbotid.py的新文件,并且填入下面的代码:我们的代码导入SlackClient,并用我们设置的环境变量SLACK_BOT_TOKEN实例化它。 当该脚本通过python命令执行时,我们通过会访问Slack API列出所有的 Slack 用户并且获得匹配一个名字为“satrterbot”的ID。这个获得聊天机器人的ID的脚本我们仅需要运行一次。当它运行为我们提供了聊天机器人的ID时,脚本会打印出简单的一行输出。在你的Slack 项目中用Python脚本打印Slack聊天机器人的ID复制这个脚本打印出的唯一ID。并将该ID作为一个环境变量BOT_ID输出。这个脚本仅仅需要运行一次来获得聊天机器人的ID。 我们现在可以在我们的运行StarterBot的Python应用程序中使用这个ID。编码我们的 StarterBot现在我们拥有了写我们的StarterBot代码所需的一切。 创建一个新文件命名为starterbot.py,它包括以下代码。对os和SlackClient的导入我们看起来很熟悉,因为我们已经在theprintbotid.py中用过它们了。通过我们导入的依赖包,我们可以使用它们获得环境变量值,并实例化Slack客户端。该代码通过我们以输出的环境变量SLACK_BOT_TOKEN 实例化SlackClient`客户端。Slack 客户端会连接到 Slack RTM API WebSocket,然后当解析来自 firehose 的消息时会不断循环。如果有任何发给 StarterBot 的消息,那么一个被称作 handle_command 的函数会决定做什么。接下来添加两个函数来解析 Slack 的输出并处理命令。parse_slack_output 函数从 Slack 接受信息,并且如果它们是发给我们的 StarterBot 时会作出判断。消息以一个给我们的聊天机器人 ID 的直接命令开始,然后交由我们的代码处理。目前只是通过 Slack 管道发布一个消息回去告诉用户去多写一些 Python 代码!这是整个程序组合在一起的样子 (你也可以 在 GitHub 中查看该文件):现在我们的代码已经有了,我们可以通过 python starterbot.py 来运行我们 StarterBot 的代码了。当 StarterBot 开始运行而且连接到 API 的输出通道在 Slack 中创建新通道,并且把 StarterBot 邀请进来,或者把 StarterBot 邀请进一个已经存在的通道中。在Slack界面创建一个新通道并且邀请 StarterBot现在在你的通道中给 StarterBot 发命令。在你的Slack通道里给你的 StarterBot 发命令如果你从聊天机器人得到的响应中遇见问题,你可能需要做一个修改。正如上面所写的这个教程,其中一行AT_BOT = “<@” + BOT_ID + “>:”,在“@starter”(你给你自己的聊天机器人起的名字)后需要一个冒号。从 AT_BOT 字符串后面移除:。Slack 似乎需要在@ 一个人名后加一个冒号,但这好像是有些不协调的。结束好吧,你现在已经获得一个简易的聊天机器人,你可以在代码中很多地方加入你想要创建的任何特性。我们能够使用 Slack RTM API 和 Python 完成很多功能。看看通过这些文章你还可以学习到什么:附加一个持久的关系数据库 或者 NoSQL 后端 比如 PostgreSQL、MySQL 或者 SQLite ,来保存和检索用户数据添加另外一个与聊天机器人互动的通道,比如 短信 或者电话呼叫集成其它的 web API,比如 GitHub、Twilio 或者 api.ai

iphone11和刚发布的华为mata30哪一个更值得入手?

从价格上来看,11价格有优势。从噱头上看馒头30更有料。一句话有钱30没钱11

iPhone查询,序列号:MNCL2J/A 序列号:DNPSFSC9HG83

口蘑大陆特么的

基于Appium+WDA+Python搭建IOS自动化测试全纪录(三):真机demo运行

前期回顾: 基于Appium+WDA+Python搭建IOS自动化测试全纪录(二):模拟器demo运行 基于Appium+WDA+Python搭建IOS自动化测试全纪录(一):环境搭建 在模拟器将demo跑通之后,就要在真机上测试啦,模拟器总是要为真机服务的。 在真机上主要是涉及到签名及证书的问题,一下blog写的特别好,然而其实我也没有看懂,RSA算法神马的早在密码学课程上还给老师了。 iOS App 签名的原理 主要在此简单记录一下证书的配置吧。 在xcode中找到build Setting配置部分(之所以把这张图放出来是因为我最开始找不到这个配置,萌新啥都找不到): 更改一下三个字段对应的内容: Code Siging identify 证书里面对应的开发者 Product Bundle Identify 对应的bundleID Provisioning Profile 包含了 证书 / Entitlements 等数据,并由苹果后台私钥签名的数据包。 数据包是.mobileprovision文件格式结尾 在终端中输入如下命令即可看到里面的信息 改完之后 我们开发的程度就可以装到真机上啦,这个时候选择在真机上运行,就可以啦。 测试app装到真机上之后,还要考虑如何开启py脚本,在真机上进行测试。 这里需要注意两点: 最后找到的地址大概如下: 放到xcode中进行签名证书配置,注意虽然我们打开的是WebDriverAgent文件夹,但是我们要配置的是WebdDriverAgentRunner 在其Build Settings中进行与证书有关的配置 配置完毕后还需要再WebdDriverAgentRunner中添加一个RoutingHTTPServer.frameork 点击添加之后->add Other 在如下路径可以查找到该framework 找的一定是appium文件路径下的! 上边关于wda并没有做过多说明,因为还不怎么了解 等了解了再补充相关知识 py脚本主要是配置有更改,主体文件请见开头(二)模拟器demod的blog 在真机上配置更改如下: 然后启动appium 发现真机上装上了厕所app 装上了WebDriverAgentRunner 然后用python运行脚本就ok拉! 以上为从搭建环境-》模拟器跑demo-》真机跑demo的简单记录,不涉及到原理方面的讲解,如有错误之处还请提出。 【之后还有跳一跳的安卓环境搭建 wda的inspector相关环境还没记录~】 [Tbc] 个人博客: 进击的程序茗

无法在iphone上连接pillow

手机上面已经设置完成了,watch上面点开之后,保持watch和iPhone之间的距离,两个设备同时打开蓝牙,手机打开pillow。

python的pillow库怎么处理灰度图像

Pillow是Python里的图像处理库(PIL:Python Image Library),提供了了广泛的文件格式支持,强大的图像处理能力,主要包括图像储存、图像显示、格式转换以及基本的图像处理操作等。1)使用 Image 类PIL最重要的类是 Image class, 你可以通过多种方法创建这个类的实例;你可以从文件加载图像,或者处理其他图像, 或者从 scratch 创建。要从文件加载图像,可以使用open( )函数,在Image模块中:>>> from PIL import Image>>> im = Image.open("E:/photoshop/1.jpg")加载成功后,将返回一个Image对象,可以通过使用示例属性查看文件内容:>>> print(im.format, im.size, im.mode)("JPEG", (600, 351), "RGB")>>>format 这个属性标识了图像来源。如果图像不是从文件读取它的值就是None。size属性是一个二元tuple,包含width和height(宽度和高度,单位都是px)。 mode 属性定义了图像bands的数量和名称,以及像素类型和深度。常见的modes 有 “L” (luminance) 表示灰度图像, “RGB” 表示真彩色图像, and “CMYK” 表示出版图像。如果文件打开错误,返回 IOError 错误。只要你有了 Image 类的实例,你就可以通过类的方法处理图像。比如,下列方法可以显示图像:im.show()2)读写图像PIL 模块支持大量图片格式。使用在 Image 模块的 open() 函数从磁盘读取文件。你不需要知道文件格式就能打开它,这个库能够根据文件内容自动确定文件格式。要保存文件,使用 Image 类的 save() 方法。保存文件的时候文件名变得重要了。除非你指定格式,否则这个库将会以文件名的扩展名作为格式保存。加载文件,并转化为png格式:"Python Image Library Test"from PIL import Imageimport osimport sysfor infile in sys.argv[1:]:f,e = os.path.splitext(infile)outfile = f +".png"if infile != outfile:try:Image.open(infile).save(outfile)except IOError:print("Cannot convert", infile)save() 方法的第二个参数可以指定文件格式。3)创建缩略图缩略图是网络开发或图像软件预览常用的一种基本技术,使用Python的Pillow图像库可以很方便的建立缩略图,如下:# create thumbnailsize = (128,128)for infile in glob.glob("E:/photoshop/*.jpg"):f, ext = os.path.splitext(infile)img = Image.open(infile)img.thumbnail(size,Image.ANTIALIAS)img.save(f+".thumbnail","JPEG")上段代码对photoshop下的jpg图像文件全部创建缩略图,并保存,glob模块是一种智能化的文件名匹配技术,在批图像处理中经常会用到。注意:Pillow库不会直接解码或者加载图像栅格数据。当你打开一个文件,只会读取文件头信息用来确定格式,颜色模式,大小等等,文件的剩余部分不会主动处理。这意味着打开一个图像文件的操作十分快速,跟图片大小和压缩方式无关。4)图像的剪切、粘贴与合并操作Image 类包含的方法允许你操作图像部分选区,PIL.Image.Image.crop 方法获取图像的一个子矩形选区,如:# crop, paste and mergeim = Image.open("E:/photoshop/lena.jpg")box = (100,100,300,300)region = im.crop(box)矩形选区有一个4元元组定义,分别表示左、上、右、下的坐标。这个库以左上角为坐标原点,单位是px,所以上诉代码复制了一个 200×200 pixels 的矩形选区。这个选区现在可以被处理并且粘贴到原图。region = region.transpose(Image.ROTATE_180)im.paste(region, box)当你粘贴矩形选区的时候必须保证尺寸一致。此外,矩形选区不能在图像外。然而你不必保证矩形选区和原图的颜色模式一致,因为矩形选区会被自动转换颜色。5)分离和合并颜色通道对于多通道图像,有时候在处理时希望能够分别对每个通道处理,处理完成后重新合成多通道,在Pillow中,很简单,如下:r,g,b = im.split()im = Image.merge("RGB", (r,g,b))对于split( )函数,如果是单通道的,则返回其本身,否则,返回各个通道。6)几何变换对图像进行几何变换是一种基本处理,在Pillow中包括resize( )和rotate( ),如用法如下:out = im.resize((128,128))out = im.rotate(45) # degree conter-clockwise其中,resize( )函数的参数是一个新图像大小的元祖,而rotate( )则需要输入顺时针的旋转角度。在Pillow中,对于一些常见的旋转作了专门的定义:out = im.transpose(Image.FLIP_LEFT_RIGHT)out = im.transpose(Image.FLIP_TOP_BOTTOM)out = im.transpose(Image.ROTATE_90)out = im.transpose(Image.ROTATE_180)out = im.transpose(Image.ROTATE_270)7)颜色空间变换在处理图像时,根据需要进行颜色空间的转换,如将彩色转换为灰度:cmyk = im.convert("CMYK")gray = im.convert("L")8)图像滤波图像滤波在ImageFilter 模块中,在该模块中,预先定义了很多增强滤波器,可以通过filter( )函数使用,预定义滤波器包括:BLUR、CONTOUR、DETAIL、EDGE_ENHANCE、EDGE_ENHANCE_MORE、EMBOSS、FIND_EDGES、SMOOTH、SMOOTH_MORE、SHARPEN。其中BLUR就是均值滤波,CONTOUR找轮廓,FIND_EDGES边缘检测,使用该模块时,需先导入,使用方法如下:from PIL import ImageFilterimgF = Image.open("E:/photoshop/lena.jpg")outF = imgF.filter(ImageFilter.DETAIL)conF = imgF.filter(ImageFilter.CONTOUR)edgeF = imgF.filter(ImageFilter.FIND_EDGES)imgF.show()outF.show()conF.show()edgeF.show()除此以外,ImageFilter模块还包括一些扩展性强的滤波器:class PIL.ImageFilter.GaussianBlur(radius=2)

python pillow import问题

你的pillow都装在了第三方编辑器anocoda上了,或者说在你安装anaconda时,是anaconda安装包附带的模块,换句话只能在anaconda编辑器下使用,也就是python自身并不存在完整的pillow模块。两个方法解决:1.在anaconda下运行使用pillow2.重新安装pillow,把pillow安装在Python自身的模块下,,不要用 py -3 -m pip install 命令了,使用命令pip install pillow(或者pip3 install pillow)

u2764ufe0f【Python从入门到精通】(二十七)更进一步的了解Pillow吧!

本文是接上一篇 u2764ufe0f【Python从入门到精通】(二十六)用Python的PIL库(Pillow)处理图像真的得心应手u2764ufe0f 进一步介绍Pillow库的使用, 本文将重点介绍一些高级特性:比如如何利用Pillow画图形(圆形,正方形),介绍通过Pillow库给图片添加水印;同时对上一篇文章未介绍的常用知识点进行补充说明。希望对读者朋友们有所帮助。 上一篇文章已经介绍了Image模块,但是介绍的还不够全面,例如如何从网页中读取图片没有介绍到,如何裁剪图片都没有介绍到。 读取网页中的图片的基本实现方式是:首先利用requests库读取当前图片链接的内容,接着将内容转成二进制数据,在通过open方法将该二进制数据,最后通过save方法进行保存。 读取结果是: 通过crop方法可以从图片中裁剪出一个指定大小的区域。裁取的区域范围是 (left, upper, right, lower) 比如从某个宽高都是400的图片中裁剪一个是宽高都是100的正方形区域,只需要指定裁剪区域的坐标是: (0, 0, 100, 100) 有裁剪还有一个方法就是重新设置图片大小的方法 resize,比如将前面400 400的图片 修改成 300 200,只需要调用resize方法 通过 convert方法进行图片模式的转换 前面介绍的ImageDraw库,只是介绍了利用它来向图片写入文本,其实ImageDraw模块还有一个更有用的途径,就是可以通过它来画各种图形。 首先创建一个600*600的画布。然后再画布中画出一个正方形,画直线的方法是 line方法。 ImageDraw.line(xy, fill=None, width=0, joint=None) 在xy的坐标之间画一条直线 xy--> 在两个坐标点之间画一条直线,坐标点的传入方式是[(x, y), (x, y), ...]或者[x, y, x, y, ...] fill--> 直线的颜色 width--> 直线的宽度 画一个边框宽度为2px,颜色为蓝色的,面积为400*400的正方形。 ImageDraw.arc(xy, start, end, fill=None, width=0) 在给定的区域范围内,从开始角到结束角之间绘制一条圆弧 xy--> 定义边界框的两个点,传入的格式是[ (x0, y0), (x1, y1)] 或者 [x0, y0, x1, y1] ,其中 x1>=x0,y1>=y0 start --> 起始角度,以度为单位,从3点钟开始顺时针增加 end--> 结束角度,以度为单位 fill--> 弧线的颜色 width-->弧线的宽度 这里就是画了一个半圆,如果结束角度是360度的话则就会画一个完整的圆。 画圆通过ImageDraw.ellipse(xy, fill=None, outline=None, width=1) 方法,该方法可以画出一个给定范围的圆 xy--> 定义边界框的两个点,传入的格式是[ (x0, y0), (x1, y1)] 或者 [x0, y0, x1, y1] ,其中 x1>=x0,y1>=y0 outline--> 轮廓的颜色 fill ---> 填充颜色 width--> 轮廓的宽度 ImageDraw.chord(xy, start, end, fill=None, outline=None, width=1) 方法用来画半圆,跟arc()方法不同的是它会用直线将起始点和结束点连接起来 xy--> 定义边界框的两个点,传入的格式是[ (x0, y0), (x1, y1)] 或者 [x0, y0, x1, y1] ,其中 x1>=x0,y1>=y0 outline--> 轮廓的颜色 fill ---> 填充颜色 width--> 轮廓的宽度 ImageDraw.pieslice(xy, start, end, fill=None, outline=None, width=1) 类似于arc()方法,不过他会在端点和圆点之间画直线 xy--> 定义边界框的两个点,传入的格式是[ (x0, y0), (x1, y1)] 或者 [x0, y0, x1, y1] ,其中 x1>=x0,y1>=y0 start --> 起始角度,以度为单位,从3点钟开始顺时针增加 end--> 结束角度,以度为单位 fill--> 弧线的颜色 width-->弧线的宽度 ImageDraw.rectangle(xy, fill=None, outline=None, width=1) xy--> 在两个坐标点之间画一条直线,坐标点的传入方式是[(x, y), (x, y), ...]或者[x, y, x, y, ...] outline--> 轮廓的颜色 fill--> 填充的颜色 width--> 轮廓线的宽度 ImageDraw.rounded_rectangle(xy, radius=0, fill=None, outline=None, width=1) 该方法可以画一个圆角矩形 xy--> 在两个坐标点之间画一条直线,坐标点的传入方式是[(x, y), (x, y), ...]或者[x, y, x, y, ...] radius--> 角的半径 outline--> 轮廓的颜色 fill--> 填充的颜色 width--> 轮廓线的宽度 这里有个问题,就是画好的图形如何从Image中扣出来呢? ImageEnhance模块主要是用于设置图片的颜色对比度亮度锐度等啥的,增强图像。 原始图像 ImageFilter模块主要用于对图像进行过滤,增强边缘,模糊处理,该模块的使用方式是 im.filter(ImageFilter) 。 其中ImageFilter按照需求传入指定的过滤值。 下面一个个试下效果 4.边缘增强 ImageGrab模块主要用于对屏幕进行截图,通过grab方法进行截取,如果不传入任何参数则表示全屏幕截图,否则是截取指定区域的图像。其中box格式是:(x1,x2,y1,y2) 利用Pillow库可以轻易的对图像增加水印 首先,用PIL的Image函数读取图片 接着,新建一张图(尺寸和原图一样) 然后,在新建的图象上用PIL的ImageDraw把字给画上去,字的颜色从原图处获取。 原图 添加文字后的效果图 本文详细介绍了Pillow库的使用,希望对读者朋友们有所帮助。 Pillow官方文档 需要获取源码的小伙伴可以关注下方的公众号,回复【python】

怎么样在Python编程中使用Pillow来处理图像

安装刚接触Pillow的朋友先来看一下Pillow的安装方法,在这里我们以Mac OS环境为例: (1)、使用 pip 安装 Python 库。pip 是 Python 的包管理工具,安装后就可以直接在命令行一站式地安装/管理各种库了(pip 文档)。$ wget http://pypi.python.org/packages/source/p/pip/pip-0.7.2.tar.gz$ tar xzf pip-0.7.2.tar.gz$ cd pip-0.7.2$ python setup.py install(2)、使用 pip 下载获取 Pillow:$ pip install pillow(3)、安装过程中命令行出现错误提示:”error: command ‘clang" failed with exit status 1”。上网查阅,发现需要通过 Xcode 更新 Command Line Tool。于是打开 Xcode->Preferences->Downloads-Components选项卡。咦?竟然没了 Command Line Tools。再查,发现 Xcode 5 以上现在需要用命令行安装:$ xcode-select —install系统会弹出安装命令行工具的提示,点击安装即可。此时再 pip install pillow,就安装成功了。pip freeze 命令查看已经安装的 Python 包,Pillow 已经乖乖躺那儿了。好了,下面开始进入教程~Image类Pillow中最重要的类就是Image,该类存在于同名的模块中。可以通过以下几种方式实例化:从文件中读取图片,处理其他图片得到,或者直接创建一个图片。使用Image模块中的open函数打开一张图片:>>> from PIL import Image>>> im = Image.open("lena.ppm")如果打开成功,返回一个Image对象,可以通过对象属性检查文件内容>>> from __future__ import print_function>>> print(im.format, im.size, im.mode)PPM (512, 512) RGBformat属性定义了图像的格式,如果图像不是从文件打开的,那么该属性值为None;size属性是一个tuple,表示图像的宽和高(单位为像素);mode属性为表示图像的模式,常用的模式为:L为灰度图,RGB为真彩色,CMYK为pre-press图像。如果文件不能打开,则抛出IOError异常。当有一个Image对象时,可以用Image类的各个方法进行处理和操作图像,例如显示图片:>>> im.show()ps:标准版本的show()方法不是很有效率,因为它先将图像保存为一个临时文件,然后使用xv进行显示。如果没有安装xv,该函数甚至不能工作。但是该方法非常便于debug和test。(windows中应该调用默认图片查看器打开)读写图片Pillow库支持相当多的图片格式。直接使用Image模块中的open()函数读取图片,而不必先处理图片的格式,Pillow库自动根据文件决定格式。Image模块中的save()函数可以保存图片,除非你指定文件格式,那么文件名中的扩展名用来指定文件格式。图片转成jpg格式from __future__ import print_functionimport os, sysfrom PIL import Imagefor infile in sys.argv[1:]: f, e = os.path.splitext(infile) outfile = f + ".jpg" if infile != outfile: try: Image.open(infile).save(outfile) except IOError: print("cannot convert", infile)save函数的第二个参数可以用来指定图片格式,如果文件名中没有给出一个标准的图像格式,那么第二个参数是必须的。创建缩略图from __future__ import print_functionimport os, sysfrom PIL import Imagesize = (128, 128)for infile in sys.argv[1:]: outfile = os.path.splitext(infile)[0] + ".thumbnail" if infile != outfile: try: im = Image.open(infile) im.thumbnail(size) im.save(outfile, "JPEG") except IOError: print("cannot create thumbnail for", infile)必须指出的是除非必须,Pillow不会解码或raster数据。当你打开一个文件,Pillow通过文件头确定文件格式,大小,mode等数据,余下数据直到需要时才处理。这意味着打开文件非常快,与文件大小和压缩格式无关。下面的程序用来快速确定图片属性:确定图片属性from __future__ import print_functionimport sysfrom PIL import Imagefor infile in sys.argv[1:]: try: with Image.open(infile) as im: print(infile, im.format, "%dx%d" % im.size, im.mode) except IOError: pass裁剪、粘贴、与合并图片Image类包含还多操作图片区域的方法。如crop()方法可以从图片中提取一个子矩形从图片中复制子图像box = im.copy() #直接复制图像box = (100, 100, 400, 400)region = im.crop(box)区域由4-tuple决定,该tuple中信息为(left, upper, right, lower)。 Pillow左边系统的原点(0,0)为图片的左上角。坐标中的数字单位为像素点,所以上例中截取的图片大小为300*300像素^2。处理子图,粘贴回原图region = region.transpose(Image.ROTATE_180)im.paste(region, box)将子图paste回原图时,子图的region必须和给定box的region吻合。该region不能超过原图。而原图和region的mode不需要匹配,Pillow会自动处理。另一个例子Rolling an imagedef roll(image, delta): "Roll an image sideways" image = image.copy() #复制图像 xsize, ysize = image.size delta = delta % xsize if delta == 0: return image part1 = image.crop((0, 0, delta, ysize)) part2 = image.crop((delta, 0, xsize, ysize)) image.paste(part2, (0, 0, xsize-delta, ysize)) image.paste(part1, (xsize-delta, 0, xsize, ysize)) return image分离和合并通道r, g, b = im.split()im = Image.merge("RGB", (b, g, r))对于单通道图片,split()返回图像本身。为了处理单通道图片,必须先将图片转成RGB。几何变换Image类有resize()、rotate()和transpose()、transform()方法进行几何变换。简单几何变换out = im.resize((128, 128))out = im.rotate(45) # 顺时针角度表示置换图像out = im.transpose(Image.FLIP_LEFT_RIGHT)out = im.transpose(Image.FLIP_TOP_BOTTOM)out = im.transpose(Image.ROTATE_90)out = im.transpose(Image.ROTATE_180)out = im.transpose(Image.ROTATE_270)transpose()和象的rotate()没有性能差别。更通用的图像变换方法可以使用transform()模式转换convert()方法模式转换im = Image.open("lena.ppm").convert("L")图像增强Filter ImageFilter模块包含很多预定义的增强filters,通过filter()方法使用应用filtersfrom PIL import ImageFilterout = im.filter(ImageFilter.DETAIL) 像素点处理point()方法通过一个函数或者查询表对图像中的像素点进行处理(例如对比度操作)。像素点变换# multiply each pixel by 1.2out = im.point(lambda i: i * 1.2)上述方法可以利用简单的表达式进行图像处理,通过组合point()和paste()还能选择性地处理图片的某一区域。处理单独通道# split the image into individual bandssource = im.split()R, G, B = 0, 1, 2# select regions where red is less than 100mask = source[R].point(lambda i: i < 100 and 255)# process the green bandout = source[G].point(lambda i: i * 0.7)# paste the processed band back, but only where red was < 100source[G].paste(out, None, mask)# build a new multiband imageim = Image.merge(im.mode, source)注意到创建mask的语句:mask = source[R].point(lambda i: i < 100 and 255)该句可以用下句表示imout = im.point(lambda i: expression and 255)如果expression为假则返回expression的值为0(因为and语句已经可以得出结果了),否则返回255。(mask参数用法:当为0时,保留当前值,255为使用paste进来的值,中间则用于transparency效果)高级图片增强对其他高级图片增强,应该使用ImageEnhance模块 。一旦有一个Image对象,应用ImageEnhance对象就能快速地进行设置。 可以使用以下方法调整对比度、亮度、色平衡和锐利度。图像增强from PIL import ImageEnhanceenh = ImageEnhance.Contrast(im)enh.enhance(1.3).show("30% more contrast")动态图Pillow支持一些动态图片的格式如FLI/FLC,GIF和其他一些处于实验阶段的格式。TIFF文件同样可以包含数帧图像。当读取动态图时,PIL自动读取动态图的第一帧,可以使用seek和tell方法读取不同郑from PIL import Imageim = Image.open("animation.gif")im.seek(1) # skip to the second frametry: while 1: im.seek(im.tell()+1) # do something to imexcept EOFError: pass # end of sequence当读取到最后一帧时,Pillow抛出EOFError异常。当前版本只允许seek到下一郑为了倒回之前,必须重新打开文件。或者可以使用下述迭代器类动态图迭代器类class ImageSequence: def __init__(self, im): self.im = im def __getitem__(self, ix): try: if ix: self.im.seek(ix) return self.im except EOFError: raise IndexError # end of sequencefor frame in ImageSequence(im): # ...do something to frame...Postscript PrintingPillow允许通过Postscript Printer在图片上添加images、text、graphics。Drawing Postscriptfrom PIL import Imagefrom PIL import PSDrawim = Image.open("lena.ppm")title = "lena"box = (1*72, 2*72, 7*72, 10*72) # in pointsps = PSDraw.PSDraw() # default is sys.stdoutps.begin_document(title)# draw the image (75 dpi)ps.image(box, im, 75)ps.rectangle(box)# draw centered titleps.setfont("HelveticaNarrow-Bold", 36)w, h, b = ps.textsize(title)ps.text((4*72-w/2, 1*72-h), title)ps.end_document()更多读取图片方法之前说到Image模块的open()函数已经足够日常使用。该函数的参数也可以是一个文件对象。从string中读取import StringIOim = Image.open(StringIO.StringIO(buffer))从tar文件中读取from PIL import TarIOfp = TarIO.TarIO("Imaging.tar", "Imaging/test/lena.ppm")im = Image.open(fp)草稿模式draft()方法允许在不读取文件内容的情况下尽可能(可能不会完全等于给定的参数)地将图片转成给定模式和大小,这在生成缩略图的时候非常有效(速度要求比质量高的场合)。draft模式from __future__ import print_functionim = Image.open(file)print("original =", im.mode, im.size)im.draft("L", (100, 100))print("draft =", im.mode, im.size)

python 怎么安装pillow

1. 安装pip [plain] view plain copy sudo easy_install pip pip 安装成功就可以直接安装pil或者pillow2. 通过命令pip install pil[plain] view plain copy pip install Pil Downloading/unpacking Pil Could not find any downloads that satisfy the requirement Pil Some externally hosted files were ignored (use --allow-external Pil to allow). Cleaning up... No distributions at all found for Pil Storing debug log for failure in /Users/macbook/Library/Logs/pip.log 3. 所以就安装pillow[plain] view plain copy pip install --use-wheel Pillow Downloading/unpacking Pillow Downloading Pillow-2.4.0.zip (6.5MB): 5.0MB downloaded Cleaning up... 弄了会别的回来发现还没有下载完,这叫一个慢呀,于是放弃4. 通过Git下载源码地址https://github.com/python-imaging/Pillow[plain] view plain copy git clone https://github.com/python-imaging/Pillow.git 然后开始编译安装4.1 [plain] view plain copy python setup.py build_ext -i 编译完之后会提示运行测试例子,并且发现JPEG support not available[plain] view plain copy -------------------------------------------------------------------- version Pillow 2.4.0 platform darwin 2.7.5 (default, Aug 25 2013, 00:04:04) [GCC 4.2.1 Compatible Apple LLVM 5.0 (clang-500.0.68)] -------------------------------------------------------------------- --- TKINTER support available *** JPEG support not available *** OPENJPEG (JPEG2000) support not available --- ZLIB (PNG/ZIP) support available *** LIBTIFF support not available --- FREETYPE2 support available *** LITTLECMS2 support not available *** WEBP support not available *** WEBPMUX support not available -------------------------------------------------------------------- To add a missing option, make sure you have the required library, and set the corresponding ROOT variable in the setup.py script. To check the build, run the selftest.py script. 4.2 因为JPEG support not available,运行python selftest.py报告错误[plain] view plain copy 1 tests of 57 failed. 于是只好卸载pillow可以通过pip命令来卸载[plain] view plain copy pip uninstall pillow sudo pip uninstall pillow Password: Uninstalling Pillow: /Library/Python/2.7/site-packages/Pillow-2.4.0-py2.7-macosx-10.9-intel.egg /usr/local/bin/pilconvert.py /usr/local/bin/pildriver.py /usr/local/bin/pilfile.py /usr/local/bin/pilfont.py /usr/local/bin/pilprint.py Proceed (y/n)? y Successfully uninstalled Pillow 成功之后需要安装libjpeg的支持[plain] view plain copy brew install libjpeg 安装成功之后重新编译pillow[plain] view plain copy -------------------------------------------------------------------- version Pillow 2.4.0 platform darwin 2.7.5 (default, Aug 25 2013, 00:04:04) [GCC 4.2.1 Compatible Apple LLVM 5.0 (clang-500.0.68)] -------------------------------------------------------------------- --- TKINTER support available --- JPEG support available *** OPENJPEG (JPEG2000) support not available --- ZLIB (PNG/ZIP) support available *** LIBTIFF support not available --- FREETYPE2 support available *** LITTLECMS2 support not available *** WEBP support not available *** WEBPMUX support not available -------------------------------------------------------------------- [plain] view plain copy python selftest.py [plain] view plain copy -------------------------------------------------------------------- Pillow 2.4.0 TEST SUMMARY -------------------------------------------------------------------- Python modules loaded from /Users/macbook/yyang/app-devel-source/python/Pillow/PIL Binary modules loaded from /Users/macbook/yyang/app-devel-source/python/Pillow/PIL -------------------------------------------------------------------- --- PIL CORE support ok --- TKINTER support ok --- JPEG support ok *** JPEG 2000 support not installed --- ZLIB (PNG/ZIP) support ok *** LIBTIFF support not installed --- FREETYPE2 support ok *** LITTLECMS2 support not installed *** WEBP support not installed -------------------------------------------------------------------- Running selftest: --- 57 tests passed. 最后执行安装[plain] view plain copy sudo python setup.py install

如何用python调用spike

1、Neuroexplorer里的Interval variable就是spike train的time stamp所构成的一个变量,实际就是你需要分析的spike串; 2、滤波可以用MATLAB来,有现成的数字滤波器设计函数,需要你调用。Neuroexploer有没有滤波功能我不太清楚

samsonc01upro如何连iphone

iphone ???

利用python中的xlwings模块操作excel中发生的报错???

xlwings是通过安装Pywin32这个windows系统API和EXCEL建立连接的,你是不是只安装了xlwings,没有安装Pywin32这个程序吧?

python grpc如何给proto文件中map类型的变量赋值?

改完之后,你可以选择project->clean,clean后你项目的R.java文件就会重新生成,所有的资源ID会重新分配,这样子你所修改的资源才能被Android真正识别,有时这个操作不是必要的,但是如果出现你修改了资源后,你的项目中出现了一些问题,那么执行Clean是一个必须的选择,这些资源包括drawable下的图片,布局里id的修改,values下资源的修改,你可以着手试一下 Good luck

python或matlab中jet是什么颜色模型?

等scope显示出来图像以后,在MATLAB上运行 set(0,"ShowHiddenHandles","On") set(gcf,"menubar","figure") 这时候你会发现scope的工具栏的上面多了一行,点击insert-axes,鼠标会变成十字形状,然后再图像的任意一处双击左键出现一个对话框PropertyEditor,选中style在窗口的右便会出现color,这时你就可以任意修改背景颜色了。 建议你最好保存数据在workspace里面,用plot的方法打印图形。不要直接复制示波器的波形。

苹果8puls 我想问问大家iPhone 8puld 的耳反功能在哪里?

耳返蓝牙耳机是没有的,只能是有线耳机

python如何通过protobuf实现rpc

由于项目组现在用的rpc是基于google protobuf rpc协议实现的,所以花了点时间了解下protobuf rpc。rpc对于做分布式系统的人来说肯定不陌生,对于rpc不了解的童鞋可以自行google,这里只是做个简单的介绍。rpc的主要功能是让分布式系统的实现更为简单,为提供强大的远程调用而不损失本地调用语义的简洁性。为了实现这个目标,rpc框架需要提供一种透明调用机制让使用者不必显示区分本地调用还是远程调用。rpc架构涉及的组件如下:客户方像调用本地方法一样去调用远程接口方法,RPC 框架提供接口的代理实现,实际的调用将委托给代理RpcProxy 。代理封装调用信息并将调用转交给RpcInvoker 去实际执行。在客户端的RpcInvoker 通过连接器RpcConnector 去维持与服务端的通道RpcChannel,并使用RpcProtocol 执行协议编码(encode)并将编码后的请求消息通过通道发送给服务方。RPC 服务端接收器 RpcAcceptor 接收客户端的调用请求,同样使用RpcProtocol 执行协议解码(decode)。解码后的调用信息传递给RpcProcessor 去控制处理调用过程,最后再委托调用给RpcInvoker 去实际执行并返回调用结果。protobuf rpc在上面组件中主要扮演RpcProtocol的角色,使得我们省去了协议的设计,并且protobuf协议在编码和空间效率都是上非常高效的,这也是很多公司采用protobuf作为数据序列化和通信协议的原因。同时protobuf rpc定义了一个抽象的rpc框架,如下图所示:RpcServiceStub和RpcService类是protobuf编译器根据proto定义生成的类,RpcService定义了服务端暴露给客户端的函数接口,具体实现需要用户自己继承这个类来实现。RpcServiceStub定义了服务端暴露函数的描述,并将客户端对RpcServiceStub中函数的调用统一转换到调用RpcChannel中的CallMethod方法,CallMethod通过RpcServiceStub传过来的函数描述符和函数参数对该次rpc调用进行encode,最终通过RpcConnecor发送给服务方。对方以客户端相反的过程最终调用RpcSerivice中定义的函数。事实上,protobuf rpc的框架只是RpcChannel中定义了空的CallMethod,所以具体怎样进行encode和调用RpcConnector都要自己实现。RpcConnector在protobuf中没有定义,所以这个完成由用户自己实现,它的作用就是收发rpc消息包。在服务端,RpcChannel通过调用RpcService中的CallMethod来具体调用RpcService中暴露给客户端的函数。介绍了这么多,对于怎么样用protobuf rpc来实现一个rpc肯定还是一头雾水吧,下面就用protobuf rpc来实现一个简单的python版rpc demo吧。下面直接给出demo描述PRC的proto文件,至于proto文件的编写规则可以参考protobuf官网。common.proto文件:package game;message RequestMessage{ required string message = 1;}message ResponseMessage{ required string message = 1;}game_service.proto文件:package game;import "common.proto";option py_generic_services = true;service GameService{ rpc connect_server(RequestMessage) returns(RequestMessage);}common.proto文件描述了RPC中收发的消息;game_service.proto描述了服务器导出的connect_server函数,该函数接受RequestMessage对象作为参数,并返回RequestMessage对象。在使用PRC协议时,必须加上option py_generic_services = true;可选项,要不然编译器不会生成包含connect_server函数的GameService描述。使用编译器protoc编译proto文件,具体命令为:protoc.exe --python_out=. game_service.proto编译后生成的文件为game_service_pb2.py,该文件主要是实现了GameService和GameService_Stub类。GameService_Stub类用于客户端调用者来调用GameService的服务。前面已经说了,在客户端,RpcChannel只实现了一个空的CallMethod,所以需要继承RpcChannel重新这个函数来encode消息和发送消息。在服务端RpcChannel需要调用CallMethod来调用Service中的函数。具体实现如下:class MyRpcChannel(service.RpcChannel): def __init__(self, rpc_service, conn): super(MyRpcChannel, self).__init__() self.logger = LogManager.get_logger("MyRpcChannel") def CallMethod(self, method_descriptor, rpc_controller, request, response_class, done): """"protol buffer rpc 需要的函数,用来发送rpc调用""" self.logger.info("CallMethod") cmd_index = method_descriptor.index assert(cmd_index < 65535) data = request.SerializeToString() total_len = len(data) + 2 self.conn.send_data("".join([pack("最后就是继承GameService,并实现connect_server函数了。class GameService(game_service_pb2.GameService): def __init__(self): self.logger = LogManager.get_logger("GameService") def connect_server(self, rpc_controller, request, callback): self.logger.info("%s", request.message) 至于用于网络收发消息的RpcConnector,可以使用python的asyncore库实现,具体实现在这就不讨论了。从上面的实现来看,protobuf rpc的实现主要包括编写proto文件并编译生成对应的service_pb2文件,继承RpcChannel并实现CallMethod和调用Service的CallMethod,继承Service来实现暴露给客户端的函数。

proto 转json 值类型错误 python

解决方法如下:1,protobuf下载安装。2,新建目录example。3,上面步骤做好之后,下面我们需要用python实现基于protobuf协议将json转化为pbstring,将pbstring转成json。

vcf文件iphone怎么打开

方法:1、下载并安装Foxmail,运行Foxmail,打开地址簿;2、在弹出的窗口中点击“个人地址簿”,然后再点击“新文件夹”;3、点击刚刚新建的文件夹,然后选择“工具”,点击“导入”,选择“名片”;4、在弹出的窗口中选择手机导出的VCF名片,按“Ctrl和A”全选,然后点击“打开”。

vcf文件iphone怎么打开

  方法:1、下载并安装Foxmail,运行Foxmail,打开地址簿;   2、在弹出的窗口中点击“个人地址簿”,然后再点击“新文件夹”;   3、点击刚刚新建的文件夹,然后选择“工具”,点击“导入”,选择“名片”;   4、在弹出的窗口中选择手机导出的VCF名片,按“Ctrl和A”全选,然后点击“打开”。

python 无法显示汉字

库不对 3.X就没这个问题了

如何用Python读取.gz数据

gz的数据是这样读的没错,但是pickle不是这样的用的啊,pickle是JSON标准库中的序列化封装类,只能序列化和反序列化python中的类、对象,而不能你随便指定一段数据让它load,它不认识的。

python3.2 io.UnsupportedOperation: read

单从提示的错误看,错误源自def select(): #先打印出来给用户 f = open(telfile,"wb") #这里用的‘只写"属性,改成"rb"只读属性 conlist = p.load(f)更正后,应该就没有所提示的错误了

python中的try...except的用法?

这里的Pickle和cPickle是模块名称不能用小写;cPickle 和 Pickle 是python的两个模块,提供了数据持久化的方法,其中cPickle是Pickle的C语言实现。try: import cPickle as p # 若能导入cPickle模块则导入,并以p命名except: import Pickle as p # 若导入cPickle模块导入错误,则导入Pickle,并以p命名

python中pickle模块的作用是什么?为什么不直接把数据存到文件中?

pickle 的默认格式是二进制格式可以使用 pickle 模块把 Python 对象直接保存到文件里,而不需要先把它们转化为字符串再保存,也不需要用底层的文件访问操作把它们写入到一个二进制文件里。pickle 模块会创建一个 Python 语言专用的二进制格式,不需要使用者考虑任何文件细节,它会帮你干净利索地完成读写对象操作,唯一需要的只是一个合法的文件句柄。用pickle比你打开文件、转换数据格式并写入这样的操作要节省不少代码行。

python中pickle模块的作用是什么?为什么不直接把数据存到文件中?

Pickle模块中最常用的函数为:(1)pickle.dump(obj, file, [,protocol])函数的功能:将obj对象序列化存入已经打开的file中。参数讲解:obj:想要序列化的obj对象。file:文件名称。protocol:序列化使用的协议。如果该项省略,则默认为0。如果为负值或HIGHEST_PROTOCOL,则使用最高的协议版本。(2)pickle.load(file)函数的功能:将file中的对象序列化读出。参数讲解:file:文件名称。(3)pickle.dumps(obj[, protocol])函数的功能:将obj对象序列化为string形式,而不是存入文件中。参数讲解:obj:想要序列化的obj对象。protocal:如果该项省略,则默认为0。如果为负值或HIGHEST_PROTOCOL,则使用最高的协议版本。(4)pickle.loads(string)函数的功能:从string中读出序列化前的obj对象。

为什么我的 python 不能 pickle 一个 dict

用的python3吧 用python3 读取 默认返回的是bytes 而不是 str (貌似如果全是英文,返回的就是str,而且是utf-8编码,python3.3 for Windows 64位) 返回的是bytes就需要解码为str bytes.decode("编码格式")就行了

Win7下用python编写脚本,引入cPickle 出现错误:No module named cPickle,请问怎么解决啊?????

python3的吧,就import pickle就行。如果能用c的版本它就用了,如果不能用,它自己用python版本的pickle

python 一个菜鸟问题,不知道怎么回事就报错了。

你是要把list保存到文件中?如果是直接用pickle.dump()。如果不是,当我没说

将python2中的cPickle修改成python3中的pickle的正确用法

因为pickle可以把字典、列表等结构化数据存到本地文件,读取后返回的还是字典、列表等结构化数据。而file.write、file.read存取的对象是字符串。 读取得到的字符串需要再次加工处理才能转换为字典、列表等,所以pickle的存在是为了方便特殊类型数据的保存。 报错:ModuleNotFoundError: No module named "cPickle" 原因:python2有cPickle,但是在python3下,是没有cPickle的; 解决办法:将cPickle改为pickle即可,但是这样还是出现编码的问题 报错:UnicodeDecodeError: "ascii" codec can"t decode byte 0xe7 in position 0: ordinal not in range(128)错误解 原因:python3中的pickle需要指定一下编码 解决办法:见下图 参考文章: 【1】 pickle 在python 2和python 3中兼容性问 【2】 Pickle incompatibility of numpy arrays between Python 2 and 3

为什么python3 pickleshare

加工数据的,可以用来存取结构化数据。举个例子: 一个字典a = {"name":"Tom","age":22},用pickle.dump存到本地文件,所存数据的结构就是字典,而普通的file.write写入文件的是字符串。读取时,pickle.load返回的是一个字典

python pickle.dump ()不知道dump多少次,如何才能从文件中完整的pickle.load()到所有数据?

乱回答,不懂别人的问题 乱作答,人家问的是多次dump()后,想一次load()出所有对象。我也是遇到这个问题,好像可以循环load然后直至发生异常

python中pickle.load有问题

pickle.load()方法返回的结果就是数据,不需要再在返回结果上调用read方法了。

为什么我的 python 不能 pickle 一个 dict

that"s not impossible

学习python中,pickle.load()的使用问题

import picklemylist = [1,2,3,"abc"]f = open("mylist.txt","wb")#以二进制写入pickle.dump(mylist,f)f.close()#文件操作完成后关闭,否则造成无法读写报错EOFError: Ran out of input

python的pickle.dump出现问题

把st的定义也贴上来看看。

python 怎样添加模块加载路径

放到C:Python33Lib目录就行了。不需要再添加路径了。或者放到你程序的根目录。

doubt sb of sth 和suspect sb of sth有什么区别?I really ____ her of her honesty.

doubt 用suspect就变成怀疑她是诚实的了

hongu是什么牌子

广州红谷皮具有限公司创始于2002年,是一家集研发、设计、生产、销售、品牌运营为一体的专业化皮具公司。目前公司拥有“HONGU”等多个自主品牌,以销售时尚的皮具产品为主,注重品质与品位的追求,并率先通过ISO9001国际标准质量体系认证,旨在为消费者提供优质的产品与服务,是国内极具发展潜力的优秀民族企业之一。公司总部位于素有“皮具之都”美誉的广州花都区,并在广州、四川设有两大生产基地,市场销售网络覆盖全国31个省市自治区及海外地区。公司通过建立标准化的生产流程和规范化的管理模式,以现代的企业管理体制和高效的管理方式增强企业活力,夯实品牌基础,建立完善的内部运营体系,为全国连锁专卖店提供强有力的支持,以促进销售业绩的快速增长。多年来,红谷始终秉承“帮助人们更好展现自我”的企业使命,将精湛的皮革手工艺发扬光大,成为国内皮具企业中极具代表性的新生力量。创立至今,红谷一路披荆斩棘,不断开拓进取,扩大企业规模。新的征途,红谷人将恪守信念,坚持“思想统一、执行统一、形象统一、服务统一”,在突破自我、超越创新的精神指引下,实现“世界级时尚生态群”的伟大企业愿景。

三星 i9500/Galaxy S4固件 PDA:MF6/PHONE:MF8/CSC:MF6(TGY) 是什么版本?

您好:非常抱歉,三星暂时没有提供网络查询真伪,包修,生产日期,生产地等信息的。如果您要鉴别手机真伪的话,请务必携带上您的购机发票、包修卡和手机,建议您到当地的三星服务中心检测手机是否可以保修,这个是最好也是最为准确的一种方法。具体当地服务中心请点击以下链接查看:http://www.samsung.com/cn/support/location/supportServiceLocation.do?page=SERVICE.LOCATION&cid=cn_ppc_support_service_repairnet_120522欢迎您访问三星数字服务平台:http://support.samsung.com.cn/ask

三星N7100固件版本PDA:MA4 / PHONE:LK7 / CSC:LJ2 (TGY)是什么版本

尊敬的三星用户您好:根据您的描述,三星N7100手机目前已经推出了官方安卓4.3版本,如果您需要升级,建议您:1.通过手机设置-关于手机-软件更新进行FOTA升级,手机通过FOTA升级注意事项(1).稳定的网络环境(3G或wifi) (2).有足够的电量(多于50%)(3).可用手机内存达1GB以上。2.下载kies软件进行固件升级,具体kies网址请您登陆:http://skp.samsungcsportal.com/integrated/popup/HtgDetailGuide3.jsp?cdsite=cn&seq=103163.如果您通过以上两种方法均不能正常升级,建议您携带三包凭证,将手机送至当地的三星服务中心进行安全升级。三星服务中心具体位置请点击以下链接:http://support-cn.samsung.com/support/ServiceLocations.asp建议您在三星官网进行“预约到店”维修申请,享受优先维修服务:http://support.samsung.com.cn/pre-booking预约成功后,请携带您的机器、发票及保修卡按时访问您预约的服务中心。评价、建议、吐槽,请点击:support.samsung.com.cn/survey

如何向IPython Notebook中导入.py文件

IPython Notebook使用起来简洁方便,但是有时候如果需要导入一个现有的.py文件,则需要注意选择导入的方法以达到不同的效果。目前遇到3种方法。(1) 将文件保存为.ipynb格式,直接拖拽到Notebook界面中的列表里:然后点击 Upload。这种方法需要定义好的文件格式,效果比较差。自己写的.ipynb往往无法上传。(2) 利用 %load:这种方法可以将自己编写的.py文件原封不动地搬到一个cell里面,自然也往往不是我们想要达到的效果。(3) 利用 IPython.nbformat.current :import IPython.nbformat.current as nbfnb = nbf.read(open("test.py", "r"), "py")nbf.write(nb, open("test.ipynb", "w"), "ipynb")这样会生成一个名为 test.ipynb 的文件

TGY代表hongkong,就是香港,如果不是的话,就不是港行。如果后面三个字母显示KOR是什么货呢

不是港行的 怎么办呢? 帮忙查下是不是港行的就OK 我不会查 判断i9100是否港行只有一个标准: 有没有香港店铺正规零售发票没有的话 就算说的天花

sincere和honest的区别

honest 是“诚实的”,用于说话是真是假sincere 是“真诚的”,用于感情的真挚希望采纳啊~~

关于Python的Selenium框架全解,一篇完整的说明书

目录 安装 selenium 第三方库 下载浏览器驱动: 需要把这些浏览器驱动放入 Python 应用目录里面的 Script 文件夹里面 ① 200 多本 Python 电子书(和经典的书籍)应该有 ② Python标准库资料(最全中文版) ③ 项目源码(四五十个有趣且可靠的练手项目及源码) ④ Python基础入门、爬虫、网络开发、大数据分析方面的视频(适合小白学习) ⑤ Python学习路线图(告别不入流的学习) 私信我01即可获取大量Python学习资源 每次当selenium启动chrome浏览器的时候,chrome浏览器很干净,没有插件、没有收藏、没有 历史 记录,这是因为selenium在启动chrome时为了保证最快的运行效率,启动了一个裸浏览器,这就是为什么需要配置参数的原因,但是有些时候我们需要的不仅是一个裸浏览器 selenium启动配置参数接收是ChromeOptions类,创建方式如下 : 创建了ChromeOptions类之后就是添加参数,添加参数有几个特定的方法,分别对应添加不同类型的配置项目 常用配置参数: 其他配置项目参数 制作无头浏览器 规避检测 门户网站检测如果是selenium请求的,有可能会拒绝访问。这也是一种反爬机制 实现规避检测 注意:这里只能使用 options 添加 如果有其他的模块要添加,注意要分开添加 元素定位语法 常用语法: 在 element 变成 elements 时,返回符合条件的所有元素组成的数组 控制浏览器大小 浏览器后退,前进 刷新 在搜索框模拟回车操作 在 WebDriver 中, 将这些关于鼠标操作的方法封装在 ActionChains 类提供 ActionChains 类提供了鼠标操作的常用方法: 语法: 想使用selenium中的键盘事件,首先我们必须导入Keys包,需要注意的是包名称Keys首字母需要大写。Keys类中提供了几乎所有的键盘事件包括组合按键如 Ctrl+A、 Ctrl+C 等 使用语法: 其他事件可以通过查看源码获取 显式等待使WebdDriver等待某个条件成立时继续执行,否则在达到最大时长时抛出超时异常 实例: WebDriverWait类是由WebDirver 提供的等待方法。在设置时间内,默认每隔一段时间检测一次当前页面元素是否存在,如果超过设置时间检测不到则抛出异常 语法: 参数: 如果某些元素不是立即可用的,隐式等待是告诉WebDriver去等待一定的时间后去查找元素。 默认等待时间是0秒,一旦设置该值,隐式等待是设置该WebDriver的实例的生命周期 案例 语法: alert 里面的方法 WebDriver操作cookie的方法: 参考链接: https://www.jianshu.com/p/773c58406bdb 与普通的在headers里添加 {"Cookies":" "} 不一样的是,此方法需要按照cookie的name,value,path,domain格式逐个cookie添加 通过execute_script()方法执行JavaScripts代码来移动滚动条的位置

python菜鸡使用selenium出问题请指教

1.打开默认的chrome在python版的Webdriver中要打开chrome浏览器,需要安装chromedriver.exe。。将这个chromedriver.exe放置在chrome的安装目录下 相对路径为 …GoogleChromeApplication,然后设置path环境变量,把chrome的安装目录地址放入path变量中。我的安装目录是C:Program FilesGoogleChromeApplication,也即是在path变量的最后,加上此目录即可,然后尝试在python中运行from selenium import webdriverdriver = webdriver.Chrome()若不报错,即代表安装成功。2.打开本地的Chromeimport osfrom selenium import webdriverfrom selenium.webdriver.chrome.options import Optionsfrom time import sleepexecutable_path = "C:Program Files (x86)GoogleChromeApplicationchromedriver.exe" //指定chromediver的位置,如果在默认路径,这两行可以省略。os.environ["webdriver.chrome.driver"] = executable_pathoptions = webdriver.ChromeOptions() //定义配置对象options.add_argument("--user-data-dir="+r"C:/Users/cui/AppData/Local/Google/Chrome/User Data/")//指定用户的配置地址,并加载至配置对象中。browser = webdriver.Chrome(executable_path,chrome_options=options)//此处注意,有两个参数,后面那个参数,一定要写成 chrome_options=XX的形式,否则运行报错。备注:chrome的用户配置数据,在c盘的user用户下,可能有些人不能找到此目录,这是因为AppDate文件夹是默认隐藏的,需要进入文件夹选项去设置一下即可。

selenium3 python环境搭建

随着Python3的普及,Selenium3也跟上了行程。而Selenium3最大的变化是去掉了Selenium RC,另外就是Webdriver从各自浏览器中脱离,必须单独下载。1、windows下多个python版本共存(本机已经安装有python2.7.8)可以通过 python 、pip 下载python跟pip本机安装的版本python 2.7.8 与python 3.5下载python后安装,添加环境变量 pathD:PythonPython35-32Scripts;D:PythonPython35-32;D:Python27;D:Python27Scripts;进入D:Python27,将python.exe修改为python2.exe进入D:PythonPython35-32,将python.exe修改为python3.exe将下载的pip 解压,进入解压目录 执行python2 setup.py install/python3 setup.py install通过 pip list 查看pip是否安装成功。python3-pip list2、在python3中安装selenium进入D:PythonPython35-32Scripts 执行pip.exe install seleniumsuccessfully install selenium3、安装selenium服务器在selenium下载地址中下载selenium-server-standalone-x.x.x.jar在执行 java -jar selenium-server-standalone-3.3.1.jar 安装selenium 服务器4、安装Firefox geckodriver安装firefox最新版本,添加Firefox可执行程序到系统环境变量。记得关闭firefox的自动更新安装geckodriver geckodrive 下载地址 将下载的geckodriver.exe 放到path路径下 D:PythonPython35-325、简单例子官网的一个实例,python_org_search.py。from selenium import webdriverfrom selenium.webdriver.common.keys import Keysdriver = webdriver.Firefox()driver.get("http://www.python.org")assert "Python" in driver.titleelem = driver.find_element_by_name("q")elem.clear()elem.send_keys("pycon")elem.send_keys(Keys.RETURN)assert "No results found." not in driver.page_sourcedriver.close()通过 python3 python_org_search.py 执行执行界面firefox6、踩过的坑1、需要安装 geckodrivererror 12、升级firefox error 23、火狐浏览器如果没有安装至默认目录,webdriver.py和firefox_binary.py的配置需要更改error4、插件间版本的匹配搞不懂。庆幸的是可以跑了~~~

selenium+python如何爬取简书网站

jianshu首页打开chrome的开发者模式,发现文章的标题,href都在a标签里,似乎也没有什么不一样的a.png接下来就是寻找页面上所有的a标签,但是且慢如果你仔细观察就会发现滑轮滚到一半的时候页面就会加载更多,这样的步骤会重复三次知道底部出现阅读更多的按钮滑轮不仅如此底部的阅读更多的href并没有告诉我们加载剩下的页面信息,唯一的办法是不断点击阅读更多这个按钮load_more.png什么,将滑轮重复三次滑倒页面的中央并且不断点击按钮这种操作http请求可做不到,这更像是js操作?没错,简书的文章并不是常规的http请求,我们不能根据不同url不断重定向,而是页面的一些动作来加载页面信息。selenium介绍selenium是一个web自动化测试工具,支持很多种语言,我们在这里可以使用python的selenium做爬虫使用,爬取简书的过程中,它的工作原理是不断注入js代码,让页面源源不断的加载,最后再提取所有的a标签。首先你得在python中下载selenium包>>> pip3 install seleniumchromedriverselenium必须搭载浏览器使用,这里我使用的是chromedriver,Chrome的开源测试版,它可以使用headless模式不需要显示前段来访问网页,算是最大特性了。python中操作在写代码之前一定要把chromedriver同一文件夹内,因为我们需要引用PATH,这样方便点。首先我们的第一个任务是刷出加载更多的按钮,需要做3次将滑轮重复三次滑倒页面的中央,这里方便起见我滑到了底部from selenium import webdriverimport timebrowser = webdriver.Chrome("./chromedriver")browser.get("https://www.jianshu.com/")for i in range(3): browser.execute_script("window.scrollTo(0, document.body.scrollHeight);") // execute_script是插入js代码的 time.sleep(2) //加载需要时间,2秒比较合理看看效果刷出了按钮接下来就是不断点击按钮加载页面,继续加入刚才的py文件之中for j in range(10): //这里我模拟10次点击 try: button = browser.execute_script("var a = document.getElementsByClassName("load-more"); a[0].click();") time.sleep(2) except: pass""" 上面的js代码说明一下 var a = document.getElementsByClassName("load-more");选择load-more这个元素 a[0].click(); 因为a是一个集合,索引0然后执行click()函数"""这个我就不贴图了,成功之后就是不断地加载页面 ,知道循环完了为止,接下来的工作就简单很多了,就是寻找a标签,get其中的text和href属性,这里我直接把它们写在了txt文件之中.titles = browser.find_elements_by_class_name("title")with open("article_jianshu.txt", "w", encoding="utf-8") as f: for t in titles: try: f.write(t.text + " " + t.get_attribute("href")) f.write("") except TypeError: pass最终结果简书文章headless模式不断加载页面肯定也很烦人,所以我们测试成功之后并不想把浏览器显示出来,这需要加上headless模式options = webdriver.ChromeOptions()options.add_argument("headless")browser = webdriver.Chrome("./chromedriver", chrome_options=options) //把上面的browser加入chrome_options参数总结当我们没办法使用正常的http请求爬取时,可以使用selenium操纵浏览器来抓取我们想要的内容,这样有利有弊,比如优点可以暴力爬虫简书并不需要cookie才能查看文章,不需要费劲心思找代理,或者说我们可以无限抓取并且不会被ban首页应该为ajax传输,不需要额外的http请求缺点爬取速度太满,想象我们的程序,点击一次需要等待2秒那么点击600次需要1200秒, 20分钟...附加这是所有完整的代码from selenium import webdriverimport timeoptions = webdriver.ChromeOptions()options.add_argument("headless")browser = webdriver.Chrome("./chromedriver", chrome_options=options)browser.get("https://www.jianshu.com/")for i in range(3): browser.execute_script("window.scrollTo(0, document.body.scrollHeight);") time.sleep(2)# print(browser)for j in range(10): try: button = browser.execute_script("var a = document.getElementsByClassName("load-more"); a[0].click();") time.sleep(2) except: pass#titles = browser.find_elements_by_class_name("title")with open("article_jianshu.txt", "w", encoding="utf-8") as f: for t in titles: try: f.write(t.text + " " + t.get_attribute("href")) f.write("") except TypeError: pass相关推荐:

python selenium如何点击页面table列表中的元素

1.通过selenium定位方式(id、name、xpath等方式)定位table标签#html源码<table border="5" id="table1" width="80%">#selenium操作代码table1=driver.find_element_by_id("table1")2.获取总行数(也就是获取tr标签的个数)#html源码<tr><th>姓名</th><th>性别</th></tr>#selenium操作源码table_rows = table1.find_elements_by_tag_name("tr")3.获取总列数(也就是tr标签下面的th标签个数)#html源码<tr><th>姓名</th><th>性别</th></tr>#selenium操作源码:第一个tr标签下有多少个thtable_rows = table_rows[0].find_elements_by_tag_name("th")4.获取单个cell值#selenium操作源码:第一行第二列的text值row1_col2 = table_rows[1].find_elements_by_tag_name("td")[1].text5.取值比对~

使用python简单封装selenium常用函数

年前走查脚本代码时,发现大家对selenium功能都在重复造轮子,而且容易出现一些常见低级bug。于是在闲暇之余,封装一些常用的selenium功能。 在某些网页中,存在多个frame嵌套。而selenium提供的find_element函数只能在当前frame中查找,不能切换到其他frame中,需要从最上级frame中逐步切换(当然也可以指定xpath的绝对路径,但是一般没人这么做)。在我们写代码过程中,需要明确知道当前frame位置和需要寻找元素的frame位置。在frame切换过程中,容易因为疏忽导致frame切换错误导致元素无法找到的bug。 页面中分布的frame,可以理解为树状结构。因此我们可以采用递归的方式, 沿着某条搜索路线frame节点,依次对树中每个节点均做一次访问。 我们以163网址上的登录框为例:点击登录按钮,弹出登录iframe页面。输入框位置在iframe中,因此我们不能使用xpath获取元素位置,需要进入iframe中,然后获取元素。 手动切换ifame可能会产生bug,因此需要一套自动切换和检索frame的机制。具体代码如下: 需要注意的是:如果页面中多个frame中,存在相同的xpath元素。还是需要指定frame的路径,否则会返回搜索到的第一个元素。 强制等待 直接调用系统time.sleep函数,不管页面加载情况一定会等待指定的时间, 即使元素已被加载 。 1.如果设置的时间较长,会浪费时间 2.如果设置的时间较短,元素可能没有加载。 页面中某元素如果未能立即加载,隐式等待告诉WebDriver需等待一定的时间,然后去查找元素。默认不等待,隐式等待作用于整个WebDriver周期,只需设置一次即可。 1.在上文的find_element函数中,采用递归方式在所有frame寻找元素。若采用隐式等待,则在每个frame中都需要等待设定的时间,耗时非常长。 2.某些页面我们想要的元素已经加载完毕,但是部分其他资源未加载。隐式等待必须等待所有元素加载完毕,增加额外等待时间。 显示等待一般作用于某一个元素,在设定的时间范围内,默认每间隔0.5秒查找元素。返回被加载的元素,若超过设定的时间范围未能查找则报错。显示等待作为selenium常用的等待机制,我们来看下他的源码和机制。 driver 注释中解释为WebDriver实例,但是代码中并未有相关检测,因此可以传入任何对象 但是__repr__函数中使用到session_id属性,如果需要显示属性或者转为str对象,最好在driver对象中添加session_id属性 在until函数中,我们可以看到driver对象传入method函数。在计时结束前,在不断循环执行method函数,如果method函数有正常返回值则退出循环,否则报TimeoutException错误。 可以采用装饰器对隐式等待进行封装,这样代码更加精简 同样的,采用装饰器对其他常用的函数进行封装,例如强制等待、点击、输入文本等。 装饰器虽然很方便,但也会产生一些麻烦。例如在find_element函数递归调用过程中,理应只要执行一次装饰器函数。但因为装饰器已经装饰完毕,导致每次递归都会执行。例如强制等待的sleep函数,如果递归次数越多等待时间越长。 解除装饰器一般有两种做法:一是约定参数,当递归第二次调用时则不生效。例如 这种方式实现简单,容易理解。但是增加了参数限制,在fun函数中就不能使用first_sleep参数。 二是采用装饰器采用wrapped实现,通过访问wrapped属性获得原始函数。例如 但是某一个函数被多个装饰器装饰时,需要递归解除装饰器。例如 最后整体代码如下 这次的封装其实还存在很多问题 1.find_element函数不仅仅只是提供查找元素功能,还提供一些其他功能,因此叫element_operation更为合适。 2.find_element函数的参数过多,并且很多参数的使用并不在函数本身中,对代码阅读很不友好。 3.得小心避免参数重复问题,假设装饰器sleep和装饰器wait_time都使用time这个参数,将无法区分具体是哪个函数使用。 4.不利于扩展和维护,当功能过多时find_element的参数过于庞大。 如果只是简单地封装和使用,上面这种方式也能达到较好的效果。如果想进一步封装,建议采用链式调用方式,装饰器辅助封装。例如 这样函数的扩展性和可阅读性有较大的提升

如何在python中使用selenium

selenium简介selenium提供了一个通用的接口,可模拟用户来操作浏览器,比如用于自动化测试等.selenium的核心是WebDriver,它提供了一组接口,这些接口能够操作各种跨平台的浏览器.各大浏览器厂商.各大浏览器厂商也支持Selenium,将其作为浏览器的一部分.selenium工具集提供了WebDriver,Selenium IDE,Selenium-Grid等Selenium 1.0 + WebDriver = Selenium 2.0Selenium WebDriver是Selenium Remote Control(Selenium-RC)的继承者.WebDriver提供了更简单和简洁的接口,克服了Selenium-RC API一些限制.相比Selenium 1.0,WebDriver是面向对象式的服务.WebDriver驱动浏览器更有效率,提供了比Selenium 1.0更多的功能Selenium RC只能在单机上运行,WebDriver则提供了远程操作的功能selenium基本使用selenium运行需要什么主要包括三部分:selenium selenium,浏览器driver,浏览器selenium selenium是一组通用的接口,而不同的浏览器提供其自身的driver(大部分是官方的),浏览器则被模拟控制操作的终端.安装pip install selenium --upgradeapt-get install chromium-browserwget http://chromedriver.storage.googleapis.com/2.10/chromedriver_linux`getconf LONG_BIT`.zipunzip chromedriver_linux32.zipcp chromedriver /usr/local/sharechmod +x /usr/local/share/chromedriverln -s /usr/local/share/chromedriver /usr/local/bin/chromedriverln -s /usr/bin/chromedriver /usr/local/share/chromedriver简单的使用from selenium import webdriverdriver = webdriver.Chrome("/usr/local/bin/chromedriver")driver.get("http://mail.sina.net");print(driver.title)API使用可参考/usr/local/lib/python2.7/dist-packages/seleniumChrome WebDriverselenium.webdriver.chrome.webdriver.WebDriver(executable_path="chromedriver", port=0, chrome_options=None, service_args=None, desired_capabilities=None, service_log_path=None)ChromeOptions可以通过ChromeDriver session配置ChromeDriver sessionChromeDriverconvenient methods for setting ChromeDriver-specific capabilitiesfrom selenium.webdriver.chrome.options import Optionschrome_options = Options()chrome_options.add_argument("--disable-extensions")chrome_options.add_argument("--disable-logging")chrome_options.add_experimental_option("prefs", {"download.default_directory":"/tmp"})chrome_options.binary_location="/usr/bin/chromium-browser"driver = webdriver.Chrome(chrome_options=chrome_options)直接使用DesiredCapabilitiesChromeOptions是构建在DesiredCapabilities之上的,为了使用DesiredCapabilities,必须知道capability的Key/value对.chrome_options = Options()capabilities={}capabilities["platform"] = "WINDOWS"capabilities["version"] = "10"capabilities.update(chrome_options.to_capabilities())driver = webdriver.Chrome(desired_capabilities=capabilities)chromedriver运行方式The ChromeDriver class不断的创建实例,会浪费很多的时间,可以通过两个方式解决.使用ChromeDriverServiceimport selenium.webdriver.chrome.service as serviceservice = service.Service("/usr/bin/chromedrive")service.start()capabilities = { }driver = webdriver.Remote(service.service_url, capabilities)driver.get("http://mail.sina.net");print(driver.title)开启单独的ChromeDriver服务./chromedriverdriver = webdriver.Remote("http://127.0.0.1:9515", DesiredCapabilities.CHROME)driver.get("http://mail.sina.net");RemoteWebDriverServerThe RemoteWebDriver is composed of two pieces: a client and a server. The client is your WebDriver test and the server is simply a Java servlet, which can be hosted in any modern JEE app server. The server will always run on the machine with the browser you want to test.wget http://selenium-release.storage.googleapis.com/2.53/selenium-server-standalone-2.53.0.jarjava -jar selenium-server-standalone-2.53.0.jarfrom selenium import webdriverfrom selenium.webdriver.common.desired_capabilities import DesiredCapabilitiesdriver = webdriver.Remote( command_executor="http://127.0.0.1:4444/wd/hub",desdesired_capabilities=DesiredCapabilities.CHROME)driver.get("http://mail.sina.net");

从零开始学python爬虫(八):selenium提取数据和其他使用方法

知识点: 知识点:了解 driver对象的常用属性和方法 注意:最新版本的selenium已经取消了这种格式,取而代之的是: 你要先导入: 然后再: 知识点:掌握 driver对象定位标签元素获取标签对象的方法 代码实现,如下,获取腾讯新闻首页的新闻标签的内容。 知识点:掌握 元素对象的操作方法 参考代码示例: 知识点:掌握 selenium控制标签页的切换 知识点:掌握 selenium控制frame标签的切换 知识点:掌握 利用selenium获取cookie的方法 知识点:掌握 selenium控制浏览器执行js代码的方法 知识点:掌握 手动实现页面等待 知识点:掌握 selenium开启无界面模式 知识点:了解 selenium使用代理ip 知识点:了解 selenium替换user-agent

python selenium设置浏览器参数

设置浏览器参数 为了避免每次运行程序都打开一个窗口,我们也可以设置无窗口访问,只需添加浏览器参数即可: from selenium import webdriver from selenium.webdriver.chrome.options import Options url = " https://www.baidu.com/" chrome_options = Options() chrome_options.add_argument("--headless") chrome_options.add_argument("lang=zh_CN.utf-8") UserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.131 Safari/537.36" chrome_options.add_argument("User-Agent=" + UserAgent) driver = webdriver.Chrome(chrome_options=chrome_options) driver.maximize_window() driver.minimize_window() driver.get(url) print(driver.title) 常用参数 启动就最大化--start-maximized 指定用户文件夹 User Data 路径,可以把书签这样的用户数据保存在系统分区以外的分区–-user-data-dir=”[PATH]” 指定缓存Cache路径–-disk-cache-dir=“[PATH]” 指定Cache大小,单位Byte–-disk-cache-size=100 隐身模式启动–-incognito 禁用Javascript–-disable-javascript# 禁止加载所有插件,可以增加速度--disable-plugins 禁用JavaScript--disable-javascript 禁用弹出拦截--disable-popup-blocking 禁用插件--disable-plugins 禁用图像--disable-images 设置代理chrome_options.add_argument("--proxy-server=http://{ip}:{port}") #http://127.1.1.10:8080

Python selenium 三种等待方式

很多人在群里问,这个下拉框定位不到、那个弹出框定位不到各种定位不到,其实大多数情况下就是两种问题:1 有frame,2 没有加等待。殊不知,你的代码运行速度是什么量级的,而浏览器加载渲染速度又是什么量级的,就好比闪电侠和凹凸曼约好去打怪兽,然后闪电侠打完回来之后问凹凸曼你为啥还在穿鞋没出门?凹凸曼分分中内心一万只羊驼飞过,欺负哥速度慢,哥不跟你玩了,抛个异常撂挑子了。那么怎么才能照顾到凹凸曼缓慢的加载速度呢?只有一个办法,那就是等喽。说到等,又有三种等法,且听博主一一道来:1. 强制等待第一种也是最简单粗暴的一种办法就是强制等待sleep(xx),强制让闪电侠等xx时间,不管凹凸曼能不能跟上速度,还是已经提前到了,都必须等xx时间。看代码:?12345678# -*- coding: utf-8 -*-fromseleniumimportwebdriverfromtimeimportsleepdriver=webdriver.Firefox()driver.get(sleep(3)# 强制等待3秒再执行下一步printdriver.current_urldriver.quit()这种叫强制等待,不管你浏览器是否加载完了,程序都得等待3秒,3秒一到,继续执行下面的代码,作为调试很有用,有时候也可以在代码里这样等待,不过不建议总用这种等待方式,太死板,严重影响程序执行速度。2. 隐性等待第二种办法叫隐性等待,implicitly_wait(xx),隐性等待的意义是:闪电侠和凹凸曼约定好,不论闪电侠去哪儿,都要等凹凸曼xx秒,如果凹凸曼在这段时间内来了,则俩人立即出发去打怪兽,如果凹凸曼在规定时间内没到,则闪电侠自己去,那自然就等着凹凸曼给你抛异常吧。看代码:?1234567# -*- coding: utf-8 -*-fromseleniumimportwebdriverdriver=webdriver.Firefox()

python34怎么离线安装selenium

selenium 为UI自动化测试工具,主要用来进行UI自动化测试,缩减测试员工的测试时间,其主要安装方式有两种,第一种为在线安装;第二种为离线安装(内网缺网环境的安装,并进行比对)第一种,在线安装从我的网盘中下载python 2.7.9的版本,下一步到底即可,可以在c盘中生成一个C:Python27的文件夹。此时python版本已经安装好,我们需要在线安装selenium的版本,我们进入到C:Python27目录下,可以看到Scripts的文件夹,点开后进去我们可以看到pip.exe的文件,如果没有,则需要网上下载安装,如果有,则直接的在dos命令下执行命令,如下图所示,则为执行成功了。此时,我们打开eclipse,在其中输入from selnium import webdriver,安装ctrl,鼠标左击则打开了webdriver的代码,如下图所示可以看到eclipse已经加载到webdriver的功能,已经安装完毕进行下面的离线之旅。第二种,离线安装首先,我们安装python的目录,还是默认的C:Python27,下载我的网盘中的tar包,解压文件,我们可以看到里面的分支结构,如下,把该内容复制到C:Python27内,setup.py 和python.exe在同一个目录下进入到C:Python下运行 python setup.py install,则可以看到运行成功,我们再次打开eclipse执行上述的验证操作,可以听到“叮”的一声,可以肯定的是没有安装成功,调用的时候失败了其实并没有失败,我们没有将selenium的环境变量配置到eclipse中,我们打开eclipse,windows-Preferences-PyDev-Interpreters-Python Interpreters-Python Interpreters.在其中添加selenium的egg文件,如下图所示然后我们在eclipse中就可以打开from selenium import webdriver 了

python中selenium控制浏览器尺寸

之前在自己电脑上写的代码测试运行非常完美,于是特别转移到了单独的一台笔记本上运行。 运行了几天之后发现有问题。selenium在抓取数据的时候莫名其妙的有一部分数据抓取不到。 分析代码呀什么的都没问题呀,奇了怪了。 三个td 前两个td里面的内容抓取的一点问题都没有,但是抓取第三个的时候就总是出错,用我自己的电脑测试就是好的。 我一度怀疑是不是我的笔记本电脑有什么驱动或者硬件导致的问题。 前两个能抓取到,shuliang抓取不到。如果我把shuliang里面的td[5]换成td[4]就是抓取他前面那一个元素,也是没问题的。但是我换成td[6]抓取他后面的元素就不行。 最后我发现有可能是selenium打开的chrome浏览器大小的问题,因为浏览器里面打开的页面正好只能显示到td[4],第5列显示不出来。 于是加一行代码 控制一下打开浏览器的大小,测试成功。shuliang成功抓取到了数据。 看来selenium真的是不是所见即所得的抓取模式,浏览器里面遮住的部分,他就抓不到了。 这可能也是很多selenium写好的代码换到别的电脑上执行就会出错的一个原因之一吧。 今天的分享记录就到这了。

从零开始学Python-使用Selenium抓取动态网页数据

您可以按照以下步骤来配置八爪鱼采集器进行数据采集:1. 打开八爪鱼采集器,并创建一个新的采集任务。2. 在任务设置中,输入要采集的网址作为采集的起始网址。3. 配置采集规则。可以使用智能识别功能,让八爪鱼自动识别页面的数据结构,或者手动设置采集规则。4. 如果手动设置采集规则,可以通过鼠标选择页面上的数据元素,并设置相应的采集规则,以确保正确获取所需的数据。5. 设置翻页规则。如果需要采集多页数据,可以设置八爪鱼采集器自动翻页,以获取更多的数据。6. 运行采集任务。确认设置无误后,可以启动采集任务,让八爪鱼开始采集数据。7. 等待采集完成。八爪鱼将根据设置的规则自动抓取页面上的数据,并将其保存到本地或导出到指定的数据库等。八爪鱼采集器是一款功能全面、操作简单、适用范围广泛的互联网数据采集器,可以帮助您轻松解决数据采集问题。了解更多八爪鱼采集器的功能和使用方法,请前往官网教程与帮助了解更多详情。

如何在python中使用selenium

1、下载Python2.7版本,默认运行安装即可; 2、安装完成之后,设置Python环境变量C:Python27(操作步骤: 电脑->属性->高级->环境变量->系统变量中的PATH为:变量值: ;C:Python27 ) 3、在python的官方网站上可以找到SetupTools的下载,解压安装安装即可; 4、当安装SetupTools之后,就可以在python安装目录下看到Script目录, 5、同样在变量中加入 path:C:Python27Scripts, 6、打开cmd命令行,将目录切换到C:Python27Scripts下,输入命令“easy_install pip“安装pip; 7、安装成功pip之后,执行pip install -U selenium 进行下载安装最新selenium的版本。

如何搭建python+selenium开发环境教程讲解

这篇文章主要为大家详细介绍了python+selenium开发环境搭建的图文教程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下web 调试工具介绍和开发环境搭建python与selenium开发环境搭建:一、下载python软件:https://www.python.org/下载完后,进行安装,安装成功后,打开IDLE(Python 3.6.2),如下图:如上图在里面输入print("Hello Wrod!")按回车,出现Hello Wrod!,说明已经把IDLE装好了,下面打开dos命令窗口输入Python按回车。如下图:出现python版本号等信息说明python已经安装成功。如果出现错误信息,则需要配置环境变量:在环境系统变量Path中添加python的安装目录,比如:C:Python35Scripts;C:Python35,这个是安装在C盘的目录。二、安装pip:https://pypi.python.org/pypi/pip下载完成后解压,打开dos命令窗口进入刚才解压后的文件夹里面(如:D:pip-9.0.1,这个是解压后的pip文件夹)输入如下信息:输入如下信息后按回车键,进行安装,安装完后显示安装目录为:C:Python35Libsite-packagespip-9.0.1-py3.5.egg再dos命令窗口输入:pip.exe按回车,如下图:然后配置环境变量,在环境系统变量Path中添加C:Python35Libsite-packagespip-9.0.1-py3.5.egg(这个是安装在C盘的目录)。再次打开打开IDLE(Python 3.6.2)输入import selenium按回车键,如下图:如果没有找到selenium可以使用pip install -U selenium命令安装下面使用selenium打开firefox浏览器:首先到https://github.com/mozilla/geckodriver/releases下载geckodriver.exe,下载完后将该exe放入python安装根目录下(与python.exe同一目录)在IDLE(Python 3.6.2)中输入import selenium按回车,再入from selenium import webdriver按回车,最后输入browser=webdriver.Firefox()按回车键就能成功调用firefox浏览器。如图:firefox前端工具介绍:1.fireBug:FireFox浏览器下的一套开发类插件2.作用:查看页面上的元素,从而根据其属性进行定位如何安装fireBug,打开FireFox浏览器照以下图片上的操作进行安装即可:前端技术介绍:1.html:网页的基础,是一种标记语言,显示数据;2.JS:前端脚本语言,解释型语言,在页面中添加交互行为;3.xml:扩展标记语言,用来传输和存储数据4.css:层叠样式表,用来表现HTML或XML等文件样式下面使用selenium打开chrome浏览器(安装Chrome浏览器webdriver):1.安装chrome浏览器;2.下载chromedriver.exe;3.将下载的chromedriver.exe文件放到安装Chrome浏览器目录下面(如:C:UsersAdministratorAppDataLocalGoogleChromeApplication)4.配置环境变量,将C:UsersAdministratorAppDataLocalGoogleChromeApplication添加到环境系统变量Path中。在IDLE(Python 3.6.2)中输入import selenium按回车,再入from selenium import webdriver按回车,最后输入b=webdriver.Chrome()按回车键就能成功调用chrome浏览器。如图:

如何在python中使用selenium

下载python版本的python包,放入到python的lib下面,然后下载selenium的jar。启动使用Java -jar selenium-server-standalone-2.0b3.jar测试例子:from selenium import webdriverfrom selenium.common.exceptions import NoSuchElementExceptionfrom selenium.webdriver.common.keys import Keysimport timebrowser = webdriver.Firefox() # Get local session of firefoxbrowser.get("") # Load pageassert "Yahoo!" in browser.titleelem = browser.find_element_by_name("p") # Find the query boxelem.send_keys("seleniumhq" + Keys.RETURN)time.sleep(0.2) # Let the page load, will be added to the APItry:browser.find_element_by_xpath("//a[contains(@href,"")]")except NoSuchElementException:assert 0, "can"t find seleniumhq"browser.close()运行的结果是打开雅虎浏览器搜素seleniuhq,然后查找Selenium (SeleniumHQ) 是 thoughtworks公司的一个集成测试的强大工具。一、Selenium 的版本Selenium 现在存在2个版本,一个叫 selenium-core, 一个叫selenium-rc 。selenium-core 是使用HTML的方式来编写测试脚本,你也可以使用 Selenium-IDE来录制脚本,但是目前Selenium-IDE只有 FireFox 版本。Selenium-RC 是 selenium-remote control 缩写,是使用具体的语言来编写测试类。selenium-rc 支持的语言非常多,这里我们着重关注java的方式。这里讲的也主要是 selenium-rc,因为个人还是喜欢这种方式.下图是Selenium IDE的运行界面截图:

python selenium 怎么定位form里边的元素

xpath定位,你用chrome浏览器,在页面上右键-》审查元素,然后会弹出开发者工具,里面会显示你选中部分的页面源码并高亮你选择的地方,在源码里右键,选择copy xpath 用这个定位

python selenium模块使用出错,这个怎么改

1. selenium 3.x开始,webdriver/firefox/webdriver.py的__init__中,executable_path="geckodriver";而2.x是executable_path="wires"2. firefox 47以上版本,需要下载第三方driver,即geckodriver;在http://docs.seleniumhq.org/download/的Third Party Drivers, Bindings, and Plugins下面找到Mozilla GeckoDriver,下载到任意电脑任意目录,解压后将该路径加入到PC的path(针对windows)即可。

如何用python和selenium写自动化脚本语言

一开始,基本上很多人都是用selenium IDE录制脚本开始的,我也是!有一本书写得很不错:selenium初学者指南!So,从录制回放开始我的selenium,而在这个过程中,不断地去补充我的html css知识,熟悉selenium的api!慢慢地,发现录制的脚本在回放的时候经常报错,通过检查发现,是定位上的错误,导致这种定位的错误的最大原因是系统前端采用了某种框架,如tigerUI,exj....所以HTML里面的标签很多都是动态的,比如id,class,name!这对selenium操作定位的元素而进行自动化来说是致命伤!所以,开始自己写定位信息,这已经是必须的了!从而学习了xpth和css选择器,掌握了更加有效,快速和稳定地定位页面上的元素(定位的时候难免会碰到有iframe,这就得先切换到iframe中再进行定位了)!也就是,在selenium IDE上写脚本!信心满满地在selenium IDE上写了长长地一段脚本,并且反复跑都能成功!总算尝到了一点点幸福的滋味!然后呢,问题来了,当我要修改和扩展这段的脚本的时候,才发现这效率是相当地低!一句句查!一句句改!多么痛的领悟!另外,selenium IDE 默认启动的是火狐,在使用selenium RC 启动 IE 进行跑脚本时浏览器总是会报错!各种搞不定,各种不淡定!决定放弃使用IDE!selenium有一个强大之处就是支持多种语方:java,C#,python等等,并且可以把录制的脚本转换成代码!我用的是java,果断走起!不用说,当然是把脚本转为java代码了,在E www.hbbz08.com clipse中重新开始搞!选择一个测试框架:有Junit和TestNg两个选择,公司用的是junit,所以,不用多说,我就用junit验证selenium脚本的运行结果!并且,Junit和TestNG都可以生成比较直观的测试报告!写好一些代码,会看到整段代码中密密麻麻充斥着基本相同的代码:开始封装代码!把常用到API封装起来!封装好之后代码看着就舒服多了!接下来,是不是也应该把代码中的定位信息用一个专门的文件放起来,再去读取里面的定位信息,这样,维护代码和维护定位信息就放在了两个地方,不用老是扎在代码和定位路径中,简单地分一下层!果断尝试!

Python selenium 如何循环点击标签

解决办法:使用selenium.webdriver.remote.webelement.WebElement提供的get_attribute方法。通过get_attribute拿到该a标签的各种属性,通过判断找到符合要求的元素进行点击。get_attribute("href") 得到a标签对应的目标页面的URL,对URL进行判断就可以了解到该页面是否站内页面。我们可以知道,如果是站内页面的话这个属性一般会是一个相对路径,或者包含了本站域名,但如果是站外页面的话,那它一定是包含了“http”的一个url。get_attribute("target")如果target不是"_blank"的话,可以判断该页面是在本窗口跳转的。

pythonwatchdog打包后失效

1、首先在打包应用程序之前,请确保Watchdog库已正确安装并可以在您的开发环境中正常工作。2、其次手动包含Watchdog库文件,检查依赖项。3、最后禁用优化选项即可打包成功。

iphone上的吹裙子的游戏 叫什么名字?

PUFF!有两个版本一个普通版的 名字就叫 Puff !高级版的叫 Puff! Premium这游戏在app store里面好象很久之前就下架了
 1 2 3 4 5 6  下一页  尾页