一.selenium与chrome结合案例
# 1. 导入webdriver
from selenium import webdriver
# 导入配置
from selenium.webdriver.chrome.options import Options
# 实例化Options对象
options = Options()
# 添加配置
# 隐藏界面
# options.add_argument('--headless')
# 配置UA
# options.add_argument('user-agent="自己网页上的用户代理"')
# 启动开发者模式
options.add_experimental_option('excludeSwitches',['enable-automation'])
options.add_experimental_option('useAutomationExtension',False)
# 2. 调用浏览器
# 需要下载驱动,
driver = webdriver.Chrome(executable_path=r'D:\chrome\chromedriver.exe',options=options) #Chromedriver.exe的路径
# 将webdriver属性干掉
driver.execute_cdp_cmd(
"Page.addScriptToEvaluateOnNewDocument",{
"source":'Object.defineProperty(navigator,"webdriver",{get:()=>undefined})'
}
)
# 最大化浏览器窗口
# 原因:有些时候页面中的内容需要最大化浏览器后才能够显示出来,那么我们获取数据的时候才能够获取到
driver.maximize_window()
# 3. 访问页面
driver.get(url='https://www.baidu.com')
二.斗鱼直播
# 需求:实时获取所有页码的所有直播间信息
# 思路:
# 使用selenium模拟翻页
# 1. 导入webdriver
from selenium import webdriver
from lxml import etree
import time,json
# 2. 调用谷歌浏览器
driver = webdriver.Chrome(executable_path=r'D:\chrome\chromedriver.exe') #Chromedriver.exe的路径
# 最大化浏览器
driver.maximize_window()
# 3. 访问网页
driver.get(url='https://www.douyu.com/g_LOL')
# 定义死循环,目的:一直点击下一页,并获取当夜页面的数据
while True:
time.sleep(3)
# 4. 获取数据
html = etree.HTML(driver.page_source)
# 获取所有直播间的li
li_list = html.xpath('//*[@id="listAll"]/div[2]/ul/li')
for li in li_list:
dic = {}
# 获取直播间名称
room_name = li.xpath('.//h3[@class="DyListCover-intro"]/text()')[0]
# 获取主播名
user_name = li.xpath('.//div[@class="DyListCover-userName"]/text()')[0]
# 发现问题:
# 1. xpath路径
# 2. 可能是因为加载页面需要时间
# 获取热度
hot = li.xpath('.//span[@class="DyListCover-hot"]/text()')[0]
# 保存数据
dic['直播间名'] = room_name
dic['主播名'] = user_name
dic['热度'] = hot
print(room_name, user_name, hot)
with open('斗鱼.txt','a',encoding='utf-8') as fp:
json.dump(dic,fp,ensure_ascii=False)
# 发现问题:
# 1. 点到第四页后,直接跳转到最后一页
# 2. 到最后一页时,还在做点击操作
# 做判断
# 如果是最后一页,退出循环
# 否则,继续点击,继续循环
# 获取下一页li中的aria-disabled属性值
next_page = html.xpath('//*[@id="listAll"]/div[2]/div/ul/li[last()]')[0]
aria_disabled = next_page.get('aria-disabled')
if aria_disabled == 'false':
# 找到并点击下一页
driver.find_element_by_xpath('//*[@id="listAll"]/div[2]/div/ul/li[last()]').click()
# 第三页: //*[@id="listAll"]/div[2]/div/ul/li[9]
# 第四页://*[@id="listAll"]/div[2]/div/ul/li[10]
else:
break
三.selenium手动打码
#发票验证登录
# 不能使用谷歌浏览器,使用IE浏览器
# 1. 安装IE浏览器,安装ie的驱动,配置ie浏览器:https://www.cnblogs.com/misswjr/p/9453566.html
# 2. 安装根证书,手动安装:https://inv-veri.chinatax.gov.cn/
# 1. 导入webdriver
from selenium import webdriver
# 2. 调用IE浏览器
driver = webdriver.Ie(executable_path=r'D:\IEDriverServer_x64_2.48.0\IEDriverServer.exe') #iedriver.exe的路径
#窗口最大化
driver.maximize_window()
# 3. 请求
driver.get(url='https://inv-veri.chinatax.gov.cn/')
# 查找并输入发票代码
driver.find_element_by_id('fpdm').send_keys('0110061')
# 查找并输入发票号码
driver.find_element_by_id('fphm').send_keys('94232299')
# 查找并输入开票日期
driver.find_element_by_id('kprq').send_keys('20200705')
# 查找并输入校验码
driver.find_element_by_id('kjje').send_keys('465102')
# 输入验证码
yzm = input('请输入验证码:')
driver.find_element_by_id('yzm').send_keys(yzm)
# 找到并点击查验
driver.find_element_by_id('checkfp').click()
四.打码平台的使用
# 超级鹰打码平台:
# http://www.chaojiying.com/
# 使用:
# 注册 ---> 登录 ---> 开发文档 ---> 选择python语言
# ---> 选择跨平台HTTP标准WEB接口
# 请求方式:POST
# 接口网址:http://upload.chaojiying.net/Upload/Processing.php
# 参数:
# user=用户账号
# pass=用户密码 //或 pass2=用户密码的md5值(32位小写)
# softid=软件ID 在用户中心,软件ID处可以生成
# codetype=验证码类型 在价格体系中选用一个适合的类型 点击这里进入
# len_min=最小位数 //默认0为不启用,图片类型为可变位长时可启用这个参数
# 以下两个参数选其一 图片文件的宽推荐不超过460px,高不超过310px
# userfile=图片文件二进制流(或是称之为内存流,文件流,字节流的概念)
# file_base64=图片文件base64字符串
import requests,base64
# 读取文件
fp = open('CheckCode.png','rb')
image = base64.b64encode(fp.read())
fp.close()
post_url = 'http://upload.chaojiying.net/Upload/Processing.php'
# 定义参数字典
data = {
'user':'账号',
'pass':'密码',
'softid':'值',
'codetype':'1902',
'file_base64':image
}
response = requests.post(url=post_url,data=data)
print(response.json()['pic_str'])
四.RPA财务机器人
# 百度AI开放平台
# URL:http://ai.baidu.com/?track=cp:aipinzhuan|pf:pc|pp:AIpingtai|pu:title|ci:|kw:10005792
# 使用步骤:
# 点击控制台 ---> 登录 ---> 选择文字识别
# ---> 点击创建应用(输入内容),点击创建 ---> 点击查看应用详情(记住API KEY和Secret Key)
# ---> 点击技术文档 ---> 选择增值税发票识别
api_key = 'mgLpUUm17V7dVoYBZfZDaUsA'
s_key = 'A8re4uRiGTrcoY6wbWtEwc4OpjZY6GPK'
import requests
import base64
from selenium import webdriver
from PIL import Image
# 定义获取token的函数
def get_token():
# client_id 为官网获取的AK, client_secret 为官网获取的SK
host = 'https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=mgLpUUm17V7dVoYBZfZDaUsA&client_secret=A8re4uRiGTrcoY6wbWtEwc4OpjZY6GPK'
response = requests.get(host)
if response:
return response.json()['access_token']
# 定义识别函数
def shibie(access_token):
'''
增值税发票识别
'''
request_url = "https://aip.baidubce.com/rest/2.0/ocr/v1/vat_invoice"
# 二进制方式打开图片文件
f = open('fapiao.png', 'rb')
img = base64.b64encode(f.read())
params = {"image": img}
# access_token = access_token
request_url = request_url + "?access_token=" + access_token
headers = {'content-type': 'application/x-www-form-urlencoded'}
response = requests.post(request_url, data=params, headers=headers)
if response:
content = response.json()['words_result']
# 获取发票代码
InvoiceCode = content['InvoiceCode']
# 获取发票号码
InvoiceNum = content['InvoiceNum']
# 获取开票日期
InvoiceDate = content['InvoiceDate']
# 获取校验码
CheckCode = content['CheckCode']
return InvoiceCode,InvoiceNum,InvoiceDate,CheckCode
# 定义识别函数
def check(detail):
# 调用IE浏览器
driver = webdriver.Ie(executable_path=r'D:\IEDriverServer_x64_2.48.0\IEDriverServer.exe') #Chromedriver.exe的路径
driver.maximize_window()
# 3. 请求
driver.get(url='https://inv-veri.chinatax.gov.cn/')
# 查找并输入发票代码
driver.find_element_by_id('fpdm').send_keys(detail[0])
# 查找并输入发票号码
driver.find_element_by_id('fphm').send_keys(detail[1])
# 查找并输入开票日期
date = detail[2].replace('年','').replace('月','').replace('日','')
driver.find_element_by_id('kprq').send_keys(date)
# 查找并输入校验码
driver.find_element_by_id('kjje').send_keys(detail[3][-6::])
# 输入验证码
# yzm = input('请输入验证码:')
# 截图
driver.save_screenshot('yzm.png')
# 局部截图,只截取验证码的部分
# 打开图片
im = Image.open('yzm.png')
# 局部截图
# crop((左,上,右,下)) 接收元组
im= im.crop((715,500,1200,610))
# 保存图片
im.save('jubu.png')
# 对接打码平台
yzm = dama()
driver.find_element_by_id('yzm').send_keys(yzm)
# 找到并点击查验
driver.find_element_by_id('checkfp').click()
...
# 定义打码平台函数
def dama():
# 读取文件
fp = open('jubu.png', 'rb')
image = base64.b64encode(fp.read())
fp.close()
post_url = 'http://upload.chaojiying.net/Upload/Processing.php'
# 定义参数字典
data = {
'user': '账号',
'pass': '密码',
'softid': '值',
'codetype': '6004',
'file_base64': image
}
response = requests.post(url=post_url, data=data)
print(response.json()['pic_str'])
return response.json()['pic_str']
if __name__ == '__main__':
access_token = get_token()
detail = shibie(access_token)
check(detail)
亲们,可以将你们的一键三连留下不 -----------谢谢啦------------