selenium案例---自动访问页面

一.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)
    

亲们,可以将你们的一键三连留下不 -----------谢谢啦------------

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值