selenium自动化测试-获取黄金实时价格

news/2024/7/19 10:49:18 标签: selenium, python, 爬虫

最近黄金比较火爆,想要获取黄金实时价格,方便后续监控预警价格,一般实时刷新的网页数据都是动态加载的,需要用到selenium自动化测试获取动态页面数据。

昨天学会了获取动态网页小说内容,同理也可以获取动态网页的黄金实时价格。

第一步:先确定目标网址

网上随便百度一下黄金实时价格: 网址地址:'https://gushitong.baidu.com/futures/ab-AU888'

第二步:确定章节目录和内容元素坐标

通过谷歌浏览器F12调试功能可以很快的定位页面元素位置.

这次定位采用 full XPath 方式,因为该网站通过id或者class属性不好定位,而且采用 full XPath 方式更加方便简单,无需分析元素层级转换格式。
同时采用 selenium 自动化测试工具的浏览器驱动模块访问定位元素值,不再使用bs4库的方式转换取html的元素值。

比如:实时价格,full XPath 值:/html/body/div/div/div/div[1]/div[2]/div/div/div/div[2]/div[1]/div/div/div/div/div[2]/div[1]/div[2]/div[1]/div/span[1]

代码中元素定位取值如下:

# 实时价格,full xpath 定位
real_price_xpath = '/html/body/div/div/div/div[1]/div[2]/div/div/div/div[2]/div[1]/div/div/div/div/div[2]/div[1]/div[2]/div[1]/div/span[1]'
# 实时价格
real_price = driver.find_element(By.XPATH, real_price_xpath).text

想要获取其他页面元素值,依次类推即可。

第三步:编写代码

依旧采用拆分步骤细化功能模块封装方法编写代码,便于后续扩展功能模块,代码中缺少的封装方法代码,详情参考之前的《selenium自动化测试》文章。

requests_webdriver.py:

python">def spider_gold_price():
    '''
    @方法名称: 爬取黄金实时价格
    @中文注释: 爬取黄金实时价格
    @入参:
    @出参:
        @返回状态:
            @return 0 失败或异常
            @return 1 成功
        @返回错误码
        @返回错误信息
        @param rsp_dict dict 响应容器
    @作    者: PandaCode辉
    @创建时间: 2023-09-22
    @使用范例: spider_gold_price()
    '''

    try:
        # 返回容器初始化
        rsp_dict = {}
        # 爬取黄金实时价格,网址
        gold_url = 'https://gushitong.baidu.com/futures/ab-AU888'
        # 实时价格,full xpath 定位
        real_price_xpath = '/html/body/div/div/div/div[1]/div[2]/div/div/div/div[2]/div[1]/div/div/div/div/div[2]/div[1]/div[2]/div[1]/div/span[1]'
        # 涨跌百分比,full xpath 定位
        ud_percent_xpath = '/html/body/div/div/div/div[1]/div[2]/div/div/div/div[2]/div[1]/div/div/div/div/div[2]/div[1]/div[2]/div[1]/div/span[4]'
        # 交易时间,full xpath 定位
        trans_datetime_xpath = '/html/body/div/div/div/div[1]/div[2]/div/div/div/div[2]/div[1]/div/div/div/div/div[2]/div[1]/div[2]/div[2]/span[2]'

        print('打开浏览器驱动')
        open_driver()

        # 打开网址网页
        print('打开网址网页')
        driver.get(gold_url)
        # 等待6秒启动完成
        driver.implicitly_wait(6)
        print('随机休眠')
        # 随机休眠 暂停0-2秒的整数秒
        time.sleep(random.randint(0, 2))

        # 实时价格
        real_price = driver.find_element(By.XPATH, real_price_xpath).text
        print('实时价格:' + str(real_price))
        rsp_dict["real_price"] = '实时价格:' + str(real_price)

        # 涨跌百分比
        ud_percent = driver.find_element(By.XPATH, ud_percent_xpath).text
        print('涨跌百分比:' + str(ud_percent))
        rsp_dict["ud_percent"] = '涨跌百分比:' + str(ud_percent)

        # UTC格式当前时区时间
        t = time.localtime()
        work_time = time.strftime("%Y-%m-%d %H:%M:%S", t)
        print('当前日期时间:' + str(work_time))
        now_year = str(work_time)[:4]
        # 交易时间
        trans_datetime = driver.find_element(By.XPATH, trans_datetime_xpath).text
        print('交易日期时间:' + str(now_year + '-' + trans_datetime))
        rsp_dict["trans_datetime"] = '交易日期时间:' + str(now_year + '-' + trans_datetime)

        print('随机休眠')
        # 休眠3秒
        time.sleep(3)
        print('关闭浏览器驱动')
        close_driver()

        # 返回容器
        return [1, '000000', '爬取实时黄金价格信息成功', [rsp_dict]]

    except Exception as e:
        print('关闭浏览器驱动')
        close_driver()
        print("爬取实时黄金价格信息异常," + str(e))
        return [0, '999999', "爬取实时黄金价格信息异常," + str(e), [None]]

第四步:运行测试效果

 -------------------------------------------end---------------------------------------


http://www.niftyadmin.cn/n/5043062.html

相关文章

SD-WAN在汽车零部件供应商中的成功案例分享

在当今数字化时代,企业面临着越来越多的网络挑战和瓶颈。传统网络架构已经无法满足企业高效、安全、可靠、低成本的网络需求。 SD-WAN作为一种新兴的网络方案,备受企业关注,SD-WAN在优化企业网络架构上发挥着重要的作用。 本期分享的是一家制…

花生壳配置TCP服务器

1、下载花生壳软件 https://hsk.oray.com/ 下载安装完成,注册后进入花生壳配置页面 2、内网穿透配置 选择TCP,输入需要内网穿透的IP地址和端口号 在花生壳软件中开启服务器 开 3、开启服务器测试 查询IP地址,可以通过花生壳软件查看公网I…

MyEclipse项目导入与导出

一、项目导出 1、右键选择项目名称,弹出菜单中选择“export”,如下图所示 2、选择“恶心“export”,弹出菜单如下;在“General“选项中,选择“File System”选项 3、点击“next”,进入保存位置选择界面&am…

高版本tensorflow部分模块缺失

Tensorflow 1.15 出现 Cannot find reference ‘contrib’ in ‘init.py’ 当我们使用如下代码时 from tensorflow.contrib.tensorboard.plugins import projector会出现 Cannot find reference ‘contrib’ in ‘init.py’ 是因为后续的tensorflow移除这些模块,可…

#FreeRTOS延时函数

延时函数的相对模式和绝对模式 vTaskDelay() 相对延时函数:相对延时是指每次延时都是从任务执行函数vTaskDelay()开始,延时指定的时间结束; 比如vTaskDelay(100),那么从调用vTaskDelay()后,任…

物联网、工业大数据平台 TDengine 与苍穹地理信息平台完成兼容互认证

当前,在政府、军事、城市规划、自然资源管理等领域,企业对地理信息的需求迅速增加,人们需要更有效地管理和分析地理数据,以进行决策和规划。在此背景下,“GIS 基础平台”应运而生,它通常指的是一个地理信息…

算法----字符串转换整数 (atoi)

题目 请你来实现一个 myAtoi(string s) 函数,使其能将字符串转换成一个 32 位有符号整数(类似 C/C 中的 atoi 函数)。 函数 myAtoi(string s) 的算法如下: 读入字符串并丢弃无用的前导空格 检查下一个字符(假设还未…

uniapp瀑布流布局写法

首先我们要清楚瀑布流是什么? 瀑布流布局(Waterfall Flow Layout),也称为瀑布流式布局,是一种常见的网页或移动应用布局方式,特点是元素以不规则的方式排列,就像瀑布中的流水一样,每…