selenium python系列(一)环境配置

醉 心 技 术 专 研,撰 写 走 心 文 章

作者/糖小幽

1:安装python

python2.7版本(最新的python版本是3.4,但用户体验没有2.7版本的好,我们选择用2.7版本)

下载地址:https://www.python.org/download/releases/2.7.8/

下载Windows x86 MSI Installer (2.7.8)安装包

设置系统环境变量

执行命令验证

输入Python

2:下载安装setuptools工具集

在命令行方式下,进入目录“C:\Python27\Scripts”,执行python ez_setup.py。

若安装后Scripts文件夹下,没有ez_setup.py

把下面内容复制到记事本,重命名ez_setup.py,记得后缀别错了,否则无效。

ez_setup.py

!/usr/bin/env python"""Setuptools bootstrapping installer.Maintained at https://github.com/pypa/setuptools/tree/bootstrap.Run this script to install or upgrade setuptools."""importosimportshutilimportsysimporttempfileimportzipfileimportoptparseimportsubprocessimportplatformimporttextwrapimportcontextlibimportwarningsfromdistutilsimportlogtry:fromurllib.requestimporturlopenexceptImportError:fromurllib2importurlopentry:fromsiteimportUSER_SITEexceptImportError: USER_SITE=NoneDEFAULT_VERSION="33.1.1"DEFAULT_URL="https://pypi.io/packages/source/s/setuptools/"DEFAULT_SAVE_DIR=os.curdirMEANINGFUL_INVALID_ZIP_ERR_MSG='Maybe is corrupted, delete it and try again.'def_python_cmd(*args):"""Execute a command. Return True if the command succeeded."""args= (sys.executable,) +argsreturnsubprocess.call(args) ==def_install(archive_filename, install_args=()):"""Install Setuptools."""with archive_context(archive_filename):#installinglog.warn('Installing Setuptools')ifnot_python_cmd('setup.py','install', *install_args): log.warn('Something went wrong during the installation.') log.warn('See the error message above.')#exitcode will be 2return2def_build_egg(egg, archive_filename, to_dir):"""Build Setuptools egg."""with archive_context(archive_filename):#building an egglog.warn('Building a Setuptools egg in %s', to_dir) _python_cmd('setup.py','-q','bdist_egg','--dist-dir', to_dir)#returning the resultlog.warn(egg)ifnotos.path.exists(egg):raiseIOError('Could not build the egg.')classContextualZipFile(zipfile.ZipFile):"""Supplement ZipFile class to support context manager for Python 2.6."""def__enter__(self):returnselfdef__exit__(self, type, value, traceback): self.close()def__new__(cls, *args, **kwargs):"""Construct a ZipFile or ContextualZipFile as appropriate."""ifhasattr(zipfile.ZipFile,'__exit__'):returnzipfile.ZipFile(*args, **kwargs)returnsuper(ContextualZipFile, cls).__new__(cls)@contextlib.contextmanagerdefarchive_context(filename):"""Unzip filename to a temporary directory, set to the cwd. The unzipped target is cleaned up after."""tmpdir=tempfile.mkdtemp() log.warn('Extracting in %s', tmpdir) old_wd=os.getcwd()try: os.chdir(tmpdir)try: with ContextualZipFile(filename) as archive: archive.extractall()exceptzipfile.BadZipfile as err:ifnoterr.args: err.args= ('', ) err.args= err.args +( MEANINGFUL_INVALID_ZIP_ERR_MSG.format(filename), )raise#going in the directorysubdir =os.path.join(tmpdir, os.listdir(tmpdir)[0]) os.chdir(subdir) log.warn('Now working in %s', subdir)yieldfinally: os.chdir(old_wd) shutil.rmtree(tmpdir)def_do_download(version, download_base, to_dir, download_delay):"""Download Setuptools."""py_desig='py.'.format(sys=sys) tp='setuptools--.egg'egg= os.path.join(to_dir, tp.format(**locals()))ifnotos.path.exists(egg): archive=download_setuptools(version, download_base, to_dir, download_delay) _build_egg(egg, archive, to_dir) sys.path.insert(0, egg)#Remove previously-imported pkg_resources if present (see#https://bitbucket.org/pypa/setuptools/pull-request/7/ for details).if'pkg_resources'insys.modules: _unload_pkg_resources()importsetuptools setuptools.bootstrap_install_from=eggdefuse_setuptools( version=DEFAULT_VERSION, download_base=DEFAULT_URL, to_dir=DEFAULT_SAVE_DIR, download_delay=15):"""Ensure that a setuptools version is installed. Return None. Raise SystemExit if the requested version or later cannot be installed."""to_dir=os.path.abspath(to_dir)#prior to importing, capture the module state for#representative modules.rep_modules ='pkg_resources','setuptools'imported=set(sys.modules).intersection(rep_modules)try:importpkg_resources pkg_resources.require("setuptools>="+version)#a suitable version is already installedreturnexceptImportError:#pkg_resources not available; setuptools is not installed; downloadpassexceptpkg_resources.DistributionNotFound:#no version of setuptools was found; allow downloadpassexceptpkg_resources.VersionConflict as VC_err:ifimported: _conflict_bail(VC_err, version)#otherwise, unload pkg_resources to allow the downloaded version to#take precedence.delpkg_resources _unload_pkg_resources()return_do_download(version, download_base, to_dir, download_delay)def_conflict_bail(VC_err, version):"""Setuptools was imported prior to invocation, so it is unsafe to unload it. Bail out."""conflict_tmpl= textwrap.dedent("""The required version of setuptools (>=) is not available, and can't be installed while this script is running. Please install a more recent version first, using 'easy_install -U setuptools'. (Currently using )""") msg= conflict_tmpl.format(**locals()) sys.stderr.write(msg) sys.exit(2)def_unload_pkg_resources(): sys.meta_path=[ importerforimporterinsys.meta_pathifimporter.__class__.__module__!='pkg_resources.extern'] del_modules=[ namefornameinsys.modulesifname.startswith('pkg_resources') ]formod_nameindel_modules:delsys.modules[mod_name]def_clean_check(cmd, target):"""Run the command to download target. If the command fails, clean up before re-raising the error."""try: subprocess.check_call(cmd)exceptsubprocess.CalledProcessError:ifos.access(target, os.F_OK): os.unlink(target)raisedefdownload_file_powershell(url, target):"""Download the file at url to target using Powershell. Powershell will validate trust. Raise an exception if the command cannot complete."""target=os.path.abspath(target) ps_cmd=("[System.Net.WebRequest]::DefaultWebProxy.Credentials =""[System.Net.CredentialCache]::DefaultCredentials;"'(new-object System.Net.WebClient).DownloadFile("%(url)s", "%(target)s")'%locals() ) cmd=['powershell','-Command', ps_cmd, ] _clean_check(cmd, target)defhas_powershell():"""Determine if Powershell is available."""ifplatform.system() !='Windows':returnFalse cmd= ['powershell','-Command','echo test'] with open(os.path.devnull,'wb') as devnull:try: subprocess.check_call(cmd, stdout=devnull, stderr=devnull)exceptException:returnFalsereturnTruedownload_file_powershell.viable=has_powershelldefdownload_file_curl(url, target): cmd= ['curl', url,'--location','--silent','--output', target] _clean_check(cmd, target)defhas_curl(): cmd= ['curl','--version'] with open(os.path.devnull,'wb') as devnull:try: subprocess.check_call(cmd, stdout=devnull, stderr=devnull)exceptException:returnFalsereturnTruedownload_file_curl.viable=has_curldefdownload_file_wget(url, target): cmd= ['wget', url,'--quiet','--output-document', target] _clean_check(cmd, target)defhas_wget(): cmd= ['wget','--version'] with open(os.path.devnull,'wb') as devnull:try: subprocess.check_call(cmd, stdout=devnull, stderr=devnull)exceptException:returnFalsereturnTruedownload_file_wget.viable=has_wgetdefdownload_file_insecure(url, target):"""Use Python to download the file, without connection authentication."""src=urlopen(url)try:#Read all the data in one block.data =src.read()finally: src.close()#Write all the data in one block to avoid creating a partial file.with open(target,"wb") as dst: dst.write(data)download_file_insecure.viable=lambda: Truedefget_best_downloader(): downloaders=( download_file_powershell, download_file_curl, download_file_wget, download_file_insecure, ) viable_downloaders= (dlfordlindownloadersifdl.viable())returnnext(viable_downloaders, None)defdownload_setuptools( version=DEFAULT_VERSION, download_base=DEFAULT_URL, to_dir=DEFAULT_SAVE_DIR, delay=15, downloader_factory=get_best_downloader):"""Download setuptools from a specified location and return its filename. `version` should be a valid setuptools version number that is available as an sdist for download under the `download_base` URL (which should end with a '/'). `to_dir` is the directory where the egg will be downloaded. `delay` is the number of seconds to pause before an actual download attempt. ``downloader_factory`` should be a function taking no arguments and returning a function for downloading a URL to a target."""#making sure we use the absolute pathto_dir =os.path.abspath(to_dir) zip_name="setuptools-%s.zip"%version url= download_base +zip_name saveto=os.path.join(to_dir, zip_name)ifnotos.path.exists(saveto):#Avoid repeated downloadslog.warn("Downloading %s", url) downloader=downloader_factory() downloader(url, saveto)returnos.path.realpath(saveto)def_build_install_args(options):"""Build the arguments to 'python setup.py install' on the setuptools package. Returns list of command line arguments."""return['--user']ifoptions.user_installelse[]def_parse_args():"""Parse the command line for options."""parser=optparse.OptionParser() parser.add_option('--user', dest='user_install', action='store_true', default=False, help='install in user site package') parser.add_option('--download-base', dest='download_base', metavar="URL", default=DEFAULT_URL, help='alternative URL from where to download the setuptools package') parser.add_option('--insecure', dest='downloader_factory', action='store_const', const=lambda: download_file_insecure, default=get_best_downloader, help='Use internal, non-validating downloader') parser.add_option('--version', help="Specify which version to download", default=DEFAULT_VERSION, ) parser.add_option('--to-dir', help="Directory to save (and re-use) package", default=DEFAULT_SAVE_DIR, ) options, args=parser.parse_args()#positional arguments are ignoredreturnoptionsdef_download_args(options):"""Return args for download_setuptools function from cmdline args."""returndict( version=options.version, download_base=options.download_base, downloader_factory=options.downloader_factory, to_dir=options.to_dir, )defmain():"""Install or upgrade setuptools and EasyInstall."""options=_parse_args() archive= download_setuptools(**_download_args(options))return_install(archive, _build_install_args(options))if__name__=='__main__': warnings.warn("ez_setup.py is deprecated; use pip to install setuptools") sys.exit(main())

次在命令行方式下,进入目录“C:\Python27\Scripts”,执行python ez_setup.py。

也可以:

下载https://bootstrap.pypa.io/ez_setup.py

python ez_setup.py #安装 setuptools

如果还是不能安装

1.下载windows的压缩包,解压到python安装路径

地址:https://pypi.python.org/packages/source/s/setuptools/setuptools-3.4.4.zip#md5=5f7c0a99cb66df161a6c08737d91f11e

2.执行命令,python setup.py即可

3:下载pip【python的安装包管理工具】

https://pypi.python.org/pypi/pip

解压pip包并进入到解压后的文件目录下。

执行python setup.py install

再切换到C:\Python27\Scripts 目录下输入:

C:\Python27\Scripts > easy_install pip

安装完毕之后会在系统目录下生成Scripts目录,里面有 :

easy_install.exe 和 pip.exe 等可执行文件。

最好,把python和python2.7.5/Scripts添加到系统配置文件path属性值里。

这样就可以直接执行了,

安装完pip和easy_installer工具后,以后再安装python其他库就方便了

例:

easy_install redis

pip install redis (推荐使用pip)

本人测试,easy_install 没有问题,但是使用pip就报错了,奇葩了,后来没办法就使用easy_install重新安装了一下:

如果还不行

下载后,解压缩上面pip-9.0.1.tar.gz文件,打开CMD,进入解压缩后文件的根目录,该目录中有一个setup.py文件,然后再cmd中输入python setup.py install命令

所有安装完成,查看相关文件路径:

看到上图中提示信息,说明你的pip已经安装成功啦,进入Python安装路径的Scripts文件夹下即可看到pip.exe,说明可以使用pip啦,具体如下:

4:安装selenium(验证pip是否安装成功)

在Python安装目录下的Scripts目录下执行pip install -U selenium安装selenium

若未联网也可以下载selenium for python解压后放置在Lib\site-pageages目录下

3.5:下载并安装测试报告文件包

下载HTMLTestRunner.py放置在Lib目录下:

http://tungwaiyip.info/software/HTMLTestRunner.html

3.6.我的第一个程序:

rom timeimportsleepfrom seleniumimportwebdriverfrom selenium.webdriver.common.keysimportKeysdriver=webdriver.Chrome()driver.maximize_window()driver.get("https://www.baidu.com/")driver.find_element_by_id("kw").send_keys("selenium",Keys.ENTER)sleep(3)driver.quit()

注意:

chromedriver.exe必须放到system32下,否则脚本不能运行

-end-

小幽希望你分享到朋友圈

分享是一种态度

热衷技术追求

记得回复关键字 “学习视频”,获取免费学习视频哦

你的每次留言,我都认真倾听整理

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180320G1O3KM00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券