显示标签为“Python”的博文。显示所有博文
显示标签为“Python”的博文。显示所有博文

2019年7月31日星期三

Python+selenium自动签到完整步骤

1、安装Python(加入环境变量)
2、测试Python是否安装成功:cmd – python
3、下载selenium
4、安装selenium:cmd到selenium的目录,python setup.py install
5、下载urllib3
6、安装urllib3: cmd到selenium的目录,python setup.py install
7、下载Chrome浏览器对应的驱动chromedriver.exe
8、将chromedriver.exe复制到python安装目录Scripts目录下

代码如下:

from bs4 import BeautifulSoup from selenium import webdriver import requests import timeoption = webdriver.ChromeOptions()option.add_argument('disable-infobars') #解决Chrome提示被自动程序控制browser = webdriver.Chrome(chrome_options=option) 	browser.get('http://xxxx/')browser.find_element_by_xpath('//*[@id="signInName"]').send_keys('xxxx')	browser.find_element_by_xpath('//*[@id="password"]').send_keys('xxxx')browser.find_element_by_xpath('//*[@id="SignInButton"]').click()	time.sleep(10)browser.find_element_by_xpath('/html/body/div/ul/li[1]').click()time.sleep(10)browser.find_element_by_xpath('//*[@id="123456"]').click()time.sleep(10)browser.quit();

其他:

1、找Xpath的偷懒方法:在页面选中某一元素,在F12的开发工具内,点击对应元素的右键copy—>xpath即可取到某元素的xpath

2、在Chrome所有页面启用flash的方法,将下面代码保存为.reg文件,双击运行。

Windows Registry Editor Version 5.00   [HKEY_CURRENT_USER\SOFTWARE\Policies\Chromium] "AllowOutdatedPlugins"=dword:00000001 "RunAllFlashInAllowMode"=dword:00000001 "DefaultPluginsSetting"=dword:00000001 "HardwareAccelerationModeEnabled"=dword:00000001  [HKEY_CURRENT_USER\SOFTWARE\Policies\Chromium\PluginsAllowedForUrls] "1"="https://*" "2"="http://*"  [HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Google\Chrome] "AllowOutdatedPlugins"=dword:00000001 "RunAllFlashInAllowMode"=dword:00000001 "DefaultPluginsSetting"=dword:00000001 "HardwareAccelerationModeEnabled"=dword:00000001  [HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Google\Chrome\PluginsAllowedForUrls] "1"="https://*" "2"="http://*"

Python环境搭建

一、安装Python软件,加入环境变量

测试Python是否安装成功:cmd – python

二、 安装包

在使用python时经常可以发现某个lib有whl、tar、tar.gz等格式的包。

whl包:已经编译的包,类似于exe文件;

tar包:源文件,只是打包在一起,还没有编译;

tar.gz包:源文件,压缩并打包在一起,还没有编译。

一般网络好的情况下,直接pip在线安装。 如果环境挺充足,可以用tar包或者tar.gz包;如果环境欠缺,比如缺少某些编译环境,或者想要快速且稳定,就得用whl包。

1 在线安装

pip install xxx

2 下载安装

2.1 如果下载得到的是.tar.gz压缩包,解压,在解压目录的当前文件夹下,打开DOS命令运行:python setup.py install

2.2 .whl文件安装:当前目录下运行:pip install xxx.whl

三、执行Python脚本

1、直接在DOS命令运行Python xxx.py

2、封装成bat文件

@echo off

start python qd_am.py

exit

3、编制成exe

3.1 安装pyinstaller

3.2 编译pyinstaller -F -w game.py  (-F表示打包单个文件,-w是为了打开exe时候不弹出黑框)

3.3 设置exe的图标 pyinstaller -F -w -i bitbug_favicon.ico game.py(-i用来设置编译成exe文件的图标,后面跟.ico格式的图片文件)

2018年5月8日星期二

Python使用xpath解析带命名空间的XML

xpath解析XML简单明了,但是XML有命名空间的话就会出错了。解决方法是节点前加命名空间的前缀,下例中x、y是变量可以任意定义。

例如XML文档如下:

<a xmlns:a="http://www.jfsay.com" xmlns:b="http://jingfengshuo.com">    <b>Text</b><a>

解析代码片段:

tree = etree.parse(path)        root = tree.getroot()                for child in root:             r=child.xpath('x:a/y:b/text()',namespaces={'x': 'www.jingfengshuo.com',               'y': 'jingfengshuo.com'})[0] 

如果XML文档如下:

<a xmlns:="http://www.jfsay.com">    <b>Text</b><a>

解析代码片段:

tree = etree.parse(path)        root = tree.getroot()                for child in root:             r=child.xpath('x:a/x:b/text()',namespaces={'x': 'www.jingfengshuo.com'})[0]

Python使用xpath解析带命名空间的XML

xpath解析XML简单明了,但是XML有命名空间的话就会出错了。解决方法是节点前加命名空间的前缀,下例中x、y是变量可以任意定义。

例如XML文档如下:

    Text

解析代码片段:

tree = etree.parse(path)        root = tree.getroot()                for child in root:             r=child.xpath('x:a/y:b/text()',namespaces={'x': 'www.jingfengshuo.com',               'y': 'jingfengshuo.com'})[0] 

如果XML文档如下:

    Text

解析代码片段:

tree = etree.parse(path)        root = tree.getroot()                for child in root:             r=child.xpath('x:a/x:b/text()',namespaces={'x': 'www.jingfengshuo.com'})[0]

2018年4月20日星期五

Python循环解析文件夹下XML文件,并将结果插入到SQLServer数据库

需求如下:A、B两台服务器分别在内外网,B服务器取A服务器上数据库中的数据,需要通过XML报文传输数据,A服务器生成XML报文,B服务器拿到XML报文解析入库。

需求分析:

A服务器发送过来的XML报文源源不断地放到B服务器上的以下目录:D:\test中

  • 1、程序遍历test目录,得到目录中所有XML文件路径
  • 2、解析XML文件
  • 3、将解析结果插入SQLServer数据库

以上三步的实现参见以下三篇文章:

Python遍历文件夹中文件操作Python使用XPath解析XML文档Python使用pymssql连接SQLServer数据库

只需把三步串起来就能实现需求了,额外增加以下内容:

  • 1、解析完一个XML文件,需要把它从目录中移走(备份)
  • 2、程序常驻内存,永远在执行,不退出,增加休眠时间

完整的代码如下:

import os,shutilfrom lxml import etreeimport pymssqlfrom datetime import datetimeimport timerootdir = 'D:/test'def mssql(sql):    conn=pymssql.connect(host='.',user='sa',password='test',database='test')    '''    如果和本机数据库交互,只需修改链接字符串    conn=pymssql.connect(host='.',database='Michael')    '''    cur=conn.cursor()        cur.execute(sql)    conn.commit()        cur.close()    conn.close()def ReadXML(path):    tree = etree.parse(path)    root = tree.getroot()    for child in root:        try:            NO=child.xpath('./NO/text()')[0]            STEP_CODE=child.xpath('./STEP_CODE/text()')[0]            MARK=child.xpath('./MARK/text()')[0]            INSERT_DATE=datetime.now().strftime('%Y-%m-%d %H:%M:%S')        except Exception as e:              print(e,"XML读取失败")        try:            sql="insert into HEAD VALUES('"+NO +"','"+STEP_CODE+"','"+MARK+"',''"+INSERT_DATE+"')"            #插入数据库                        mssql(sql)          except Exception as e:              print(e,"数据插入失败")    dstfile=rootdir+"/bak/"#备份目录    try:        shutil.move(path,dstfile)#移动文件     except Exception as e:        print(e)   def main():        #列出文件夹下所有的目录与文件    l = os.listdir(rootdir)         for i in range(len(l)):            path = os.path.join(rootdir,l[i])            if os.path.isfile(path):                   path=path.replace("\\", "/")                                      ReadXML(path)if __name__=="__main__":    while True:        main()        print("开始抓取")        time.sleep(15)#休眠15秒

Python循环解析文件夹下XML文件,并将结果插入到SQLServer数据库

需求如下:A、B两台服务器分别在内外网,B服务器取A服务器上数据库中的数据,需要通过XML报文传输数据,A服务器生成XML报文,B服务器拿到XML报文解析入库。

需求分析:

A服务器发送过来的XML报文源源不断地放到B服务器上的以下目录:D:\test中

  • 1、程序遍历test目录,得到目录中所有XML文件路径
  • 2、解析XML文件
  • 3、将解析结果插入SQLServer数据库

以上三步的实现参见以下三篇文章:

Python遍历文件夹中文件操作Python使用XPath解析XML文档Python使用pymssql连接SQLServer数据库

只需把三步串起来就能实现需求了,额外增加以下内容:

  • 1、解析完一个XML文件,需要把它从目录中移走(备份)
  • 2、程序常驻内存,永远在执行,不退出,增加休眠时间

完整的代码如下:

import os,shutilfrom lxml import etreeimport pymssqlfrom datetime import datetimeimport timerootdir = 'D:/test'def mssql(sql):    conn=pymssql.connect(host='.',user='sa',password='test',database='test')    '''    如果和本机数据库交互,只需修改链接字符串    conn=pymssql.connect(host='.',database='Michael')    '''    cur=conn.cursor()        cur.execute(sql)    conn.commit()        cur.close()    conn.close()def ReadXML(path):    tree = etree.parse(path)    root = tree.getroot()    for child in root:        try:            NO=child.xpath('./NO/text()')[0]            STEP_CODE=child.xpath('./STEP_CODE/text()')[0]            MARK=child.xpath('./MARK/text()')[0]            INSERT_DATE=datetime.now().strftime('%Y-%m-%d %H:%M:%S')        except Exception as e:              print(e,"XML读取失败")        try:            sql="insert into HEAD VALUES('"+NO +"','"+STEP_CODE+"','"+MARK+"',''"+INSERT_DATE+"')"            #插入数据库                        mssql(sql)          except Exception as e:              print(e,"数据插入失败")    dstfile=rootdir+"/bak/"#备份目录    try:        shutil.move(path,dstfile)#移动文件     except Exception as e:        print(e)   def main():        #列出文件夹下所有的目录与文件    l = os.listdir(rootdir)         for i in range(len(l)):            path = os.path.join(rootdir,l[i])            if os.path.isfile(path):                   path=path.replace("\\", "/")                                      ReadXML(path)if __name__=="__main__":    while True:        main()        print("开始抓取")        time.sleep(15)#休眠15秒

2018年4月19日星期四

Python遍历文件夹中文件操作

以下代码实现遍历D盘test文件夹下的所有文件,得到所有文件的路径。为防止Windows下转义字符的干扰,文件路径改为反斜杠/的形式,使用path=path.replace(“\\”, “/”)将得到的文件路径转换为反斜杠形式。

import osrootdir = 'D:/test'#列出文件夹下所有的目录与文件list = os.listdir(rootdir)for i in range(0,len(list)):path = os.path.join(rootdir,list[i])if os.path.isfile(path):path=path.replace("\\", "/")print(path)

Python遍历文件夹中文件操作

以下代码实现遍历D盘test文件夹下的所有文件,得到所有文件的路径。为防止Windows下转义字符的干扰,文件路径改为反斜杠/的形式,使用path=path.replace(“\\”, “/”)将得到的文件路径转换为反斜杠形式。

import osrootdir = 'D:/test'#列出文件夹下所有的目录与文件list = os.listdir(rootdir)for i in range(0,len(list)):path = os.path.join(rootdir,list[i])if os.path.isfile(path):path=path.replace("\\", "/")print(path)

Python使用pymssql连接SQLServer数据库

一、下载对应Python版本的pymssql包

pymssql包的名字一般如下pymssql-2.1.4.dev5-cp36-cp36m-win_amd64.whl,其中cp36代表Python3.6版。

二、安装pymssql包

开始-运行-CMD-pip install E:\Downloads\pymssql-2.1.4.dev5-cp36-cp36m-win_amd64.whl

三、连接SQLServer数据库(以下查询需要先建立数据库)

import pymssqlconn=pymssql.connect(host='10.0.0.1',user='sa',password='test',database='test')'''如果和本机数据库交互,只需修改链接字符串conn=pymssql.connect(host='.',database='Michael')'''cur=conn.cursor()cur.execute('select * from test')#如果update/delete/insert记得要conn.commit()#否则数据库事务无法提交#conn.commit()print (cur.fetchall())cur.close()conn.close()

Python使用pymssql连接SQLServer数据库

一、下载对应Python版本的pymssql包

pymssql包的名字一般如下pymssql-2.1.4.dev5-cp36-cp36m-win_amd64.whl,其中cp36代表Python3.6版。

二、安装pymssql包

开始-运行-CMD-pip install E:\Downloads\pymssql-2.1.4.dev5-cp36-cp36m-win_amd64.whl

三、连接SQLServer数据库(以下查询需要先建立数据库)

import pymssqlconn=pymssql.connect(host='10.0.0.1',user='sa',password='test',database='test')'''如果和本机数据库交互,只需修改链接字符串conn=pymssql.connect(host='.',database='Michael')'''cur=conn.cursor()cur.execute('select * from test')#如果update/delete/insert记得要conn.commit()#否则数据库事务无法提交#conn.commit()print (cur.fetchall())cur.close()conn.close()

Python使用XPath解析XML文档

XPath(XML Path Language)是一种小型的查询语言:

1)可在XML中查找信息

2)支持HTML的查找

3)通过元素和属性进行导航

python开发使用XPath条件:

由于XPath属于lxml库模块,所以首先要安装库lxml

XPath的使用方法:

首先讲一下XPath的基本语法知识:

四种标签的使用方法

1) // 双斜杠 定位根节点,会对全文进行扫描,在文档中选取所有符合条件的内容,以列表的形式返回。

2) / 单斜杠 寻找当前标签路径的下一层路径标签或者对当前路标签内容进行操作。

3) /text() 获取当前路径下的文本内容。

4) /@xxxx 提取当前路径下标签的属性值

5) | 可选符 使用|可选取若干个路径 如//p | //div 即在当前路径下选取所有符合条件的p标签和div标签

6) . 点 用来选取当前节点

7) .. 双点 选取当前节点的父节点

注:以下代码在Python3.6.1下调试通过

一、Python读取XML简单实例

from lxml import etreetext = """<data>    <country name="Liechtenstein">        <rank>1</rank>        <year>2008</year>        <gdppc>141100</gdppc>        <neighbor name="Austria" direction="E"/>        <neighbor name="Switzerland" direction="W"/>    </country>    <country name="Singapore">        <rank>4</rank>        <year>2011</year>        <gdppc>59900</gdppc>        <neighbor name="Malaysia" direction="N"/>    </country>    <country name="Panama">        <rank>68</rank>        <year>2011</year>        <gdppc>13600</gdppc>        <neighbor name="Costa Rica" direction="W"/>        <neighbor name="Colombia" direction="E"/>    </country></data>"""root = etree.XML(text)for child in root:   print(child.tag, child.attrib)   print('rank',child.xpath('./rank/text()')[0])   print('year', child.xpath('./year/text()')[0])   print('gdppc', child.xpath('./gdppc/text()')[0])   print('neighbor', child.xpath('./neighbor/@name')[0])

二、Python读取本地XML简单实例

如果XML文档存放在本地,可以文件对象打开xml就读取成字符串类型,也可以直接tree = etree.parse(“D:/lujing/test.xml”)读取。

etree.parse("D:/lujing/test.xml")from lxml import etreetree = etree.parse("D:/lujing/test.xml")root = tree.getroot()for child in root:   print(child.tag, child.attrib)   print('rank',child.xpath('./rank/text()')[0])   print('year', child.xpath('./year/text()')[0])   print('gdppc', child.xpath('./gdppc/text()')[0])   print('neighbor', child.xpath('./neighbor/@name')[0])

三、为防止读取XML出错导致程序退出,可使用try捕获异样

from lxml import etreetree = etree.parse("D:/lujing/test.xml")root = tree.getroot()root = etree.XML(text)for child in root:   try:       print(child.tag, child.attrib)       print('rank',child.xpath('./rank/text()')[0])       print('year', child.xpath('./year/text()')[0])       print('gdppc', child.xpath('./gdppc/text()')[0])       print('neighbor', child.xpath('./neighbor/@name')[0])       print('neighbor', child.xpath('./neighbor/@name')[1])   except Exception as e:        print(e)

Python使用XPath解析XML文档

XPath(XML Path Language)是一种小型的查询语言:

1)可在XML中查找信息

2)支持HTML的查找

3)通过元素和属性进行导航

python开发使用XPath条件:

由于XPath属于lxml库模块,所以首先要安装库lxml

XPath的使用方法:

首先讲一下XPath的基本语法知识:

四种标签的使用方法

1) // 双斜杠 定位根节点,会对全文进行扫描,在文档中选取所有符合条件的内容,以列表的形式返回。

2) / 单斜杠 寻找当前标签路径的下一层路径标签或者对当前路标签内容进行操作。

3) /text() 获取当前路径下的文本内容。

4) /@xxxx 提取当前路径下标签的属性值

5) | 可选符 使用|可选取若干个路径 如//p | //div 即在当前路径下选取所有符合条件的p标签和div标签

6) . 点 用来选取当前节点

7) .. 双点 选取当前节点的父节点

注:以下代码在Python3.6.1下调试通过

一、Python读取XML简单实例

from lxml import etreetext = """            1        2008        141100                                4        2011        59900                        68        2011        13600                    """root = etree.XML(text)for child in root:   print(child.tag, child.attrib)   print('rank',child.xpath('./rank/text()')[0])   print('year', child.xpath('./year/text()')[0])   print('gdppc', child.xpath('./gdppc/text()')[0])   print('neighbor', child.xpath('./neighbor/@name')[0])

二、Python读取本地XML简单实例

如果XML文档存放在本地,可以文件对象打开xml就读取成字符串类型,也可以直接tree = etree.parse(“D:/lujing/test.xml”)读取。

etree.parse("D:/lujing/test.xml")读取。from lxml import etreetree = etree.parse("D:/lujing/test.xml")root = tree.getroot()for child in root:   print(child.tag, child.attrib)   print('rank',child.xpath('./rank/text()')[0])   print('year', child.xpath('./year/text()')[0])   print('gdppc', child.xpath('./gdppc/text()')[0])   print('neighbor', child.xpath('./neighbor/@name')[0])

三、为防止读取XML出错导致程序退出,可使用try捕获异样

from lxml import etreetree = etree.parse("D:/lujing/test.xml")root = tree.getroot()root = etree.XML(text)for child in root:   try:       print(child.tag, child.attrib)       print('rank',child.xpath('./rank/text()')[0])       print('year', child.xpath('./year/text()')[0])       print('gdppc', child.xpath('./gdppc/text()')[0])       print('neighbor', child.xpath('./neighbor/@name')[0])       print('neighbor', child.xpath('./neighbor/@name')[1])   except Exception as e:        print(e)