当前位置:   article > 正文

使用Selenium监控页面库存变化

使用Selenium监控页面库存变化

在这里插入图片描述
日常遇到一些商品比较抢手的情况,经常无库存。所以总希望能够监控它的库存,并在有库存的时候进行提醒。那以某伊份为例,尝试基于Python的Selenium模块的监控方法。

1 什么是Selenium

Selenium是一个用于Web应用程序测试的工具。Selenium测试直接运行在浏览器中,就像真正的用户在操作一样。支持的浏览器包括IE(7, 8, 9, 10, 11),Mozilla Firefox,Safari,Google Chrome,Opera,Edge等。这个工具的主要功能包括:测试与浏览器的兼容性——测试应用程序看是否能够很好得工作在不同浏览器和操作系统之上。测试系统功能——创建回归测试检验软件功能和用户需求。支持自动录制动作和自动生成.Net、Java、Perl等不同语言的测试脚本。

Selenium框架底层是使用JavaScript模拟真实用户对浏览器进行操作。测试脚本执行时,浏览器自动按照脚本代码做出点击,输入,打开,验证等操作,就像真实用户所做的一样,从终端用户的角度测试应用程序。使用简单,可使用Java,Python等多种语言编写用例脚本,使浏览器兼容性测试自动化成为可能,尽管在不同的浏览器上依然有细微的差别。

Selenium优点:模拟真实用户对浏览器进行操作。

Selenium缺点:啰嗦,一步错,步步错,需要加各种条件约束。

2 步骤及分析

2.1 提取商品链接地址

首先需要找到商品的链接地址,毕竟要用浏览器去访问。某伊份虽然是app端,但也可以通过各种分享的骚操作拿到地址。

2.2 分析商品详情页中的关键词

比如库存数量,售罄等字眼,及其所在的元素位置。再复制出相应的选择器路径或xpath等,看个人喜好。

如这个的“已售罄”提示文本的xpath路径是:

//*[@id="app"]/div[2]/div/div[2]/ul/li[1]/div[1]/div[2]/span[2]
  • 1

2.3 整理思路及步骤

这次要监控3个商品,思路如下:

打开页面→设定监控间隔→切换页面→刷新→获取关键词→切换页面→刷新→获取关键词→…→有货通知

2.4 其余补充

2.4.1 登录cookies暂先手动保存,通过代码置入浏览器中;

2.4.2 可选有头或无头模式,节省资源占用。有头就是看得到浏览器,无头就是看不到,但功能正常运行。

3 效果及代码

3.1 代码:

用push+做推送;

用bro.add_cookie(),将手动抓取的cookies置入浏览器;

用几个变量记录监控到的有货次数,超过6次停止监控。

  from selenium.webdriver import ChromeOptions
  import time,os,json,requests
  from selenium import webdriver
  from urllib import parse
  p_token= ''#push+
  print("开始运行")
  options = ChromeOptions()#设置
  options.add_argument('--window-size=300,300')#设置窗口大小
  h = input('输入1开启无头模式,输入任意内容关闭无头模式:')
  if h == "1":
      options.add_argument('--headless')  # 无头模式
      print("启用 无头模式")
  else:
      print("关闭 无头模式")
  bro = webdriver.Chrome(options= options)#按设置创建浏览器
  bro.get("https://m.laiyifen.com/citylife/lifeProDetail?channelSkuUnitId=115812******")#商品1
  bro.delete_all_cookies()# 首先清除由于浏览器打开已有的cookies
  with open('cookies_1.txt', 'r') as f: #cookies_1.txt在py源码目录下
      cookies_list = json.load(f)# 使用json读取cookies 注意读取的是文件 所以用load而不是loads
      for cookie in cookies_list:
          if isinstance(cookie.get('expiry'), float):
              cookie['expiry'] = int(cookie['expiry'])
          bro.add_cookie(cookie)
  bro.get("https://m.laiyifen.com/citylife/lifeProDetail?channelSkuUnitId=115812*****")# 重新发送请求(这步是非常必要的,要不然携带完cookie之后仍然在登录界面)
  time.sleep(1)
  bro.execute_script('window.open("https://m.laiyifen.com/citylife/lifeProDetail?channelSkuUnitId=11581*****");') #商品2
  time.sleep(1)
  bro.execute_script('window.open("https://m.laiyifen.com/citylife/lifeProDetail?channelSkuUnitId=11581*******");') #商品3
  handles = bro.window_handles #获取标签句柄
  n = 1 #循环次数
  ddok = 0 #有货次数
  yhok = 0 #有货次数
  hmok = 0 #有货次数
  while True:
      i = 0
      for i in range(3):
          bro.switch_to.window(handles[i])#切换标签,实际标签第一个为0,第二个为2,第三个为1
          bro.refresh()
          #print(i)
          time.sleep(3)
          try:#正常运行下面代码
              r = bro.find_element_by_xpath('''//*[@id="app"]/div[2]/div/div[2]/ul/li[1]/div[1]/div[2]/span[2]''').text
              if r == "已售罄":
                  if i == 0:
                      print("dd 已售罄")
                  elif i == 1:
                      print("yh 已售罄")
                  else:
                      print("hm 已售罄")
              elif str(r).find("库存") != -1:
                  if i == 0:
                      ddok = ddok + 1
                      print("dd 有货")
                      if ddok <= 2:
                          t = str(time.time())
                          content = parse.quote_plus(t)  # url编码
                          title = parse.quote_plus('dd 有货')  # url编码
                          requests.get(f'http://www.pushplus.plus/send?token={p_token}&title={title}&content={content}')
                  elif i == 1:
                      yhok = yhok + 1
                      print("yh 有货")
                      if yhok <= 2:
                          t = str(time.time())
                          content = parse.quote_plus(t)  # url编码
                          title = parse.quote_plus('yh 有货')  # url编码
                          requests.get(f'http://www.pushplus.plus/send?token={p_token}&title={title}&content={content}')
                  else:
                      hmok = hmok + 1
                      print("hm 有货")
                      if hmok <= 2:
                          t = str(time.time())
                          content = parse.quote_plus(t)  # url编码
                          title = parse.quote_plus('hm 有货')  # url编码
                          requests.get(f'http://www.pushplus.plus/send?token={p_token}&title={title}&content={content}')
              else:
                  if i == 0:
                      print("dd 已售罄")
                  elif i == 1:
                      print("yh 已售罄")
                  else:
                      print("hm 已售罄")
          except Exception:# 产生错误时运行的代码,Exception是一个类
              print('异常,未获取到数据')
          i = i + 1
      print(f"已运行{n}次")
      if 叮咚ok >= 6:  # 提醒了6次就结束循环
          print("已监控到6次,结束运行")
          break
      n = n + 1
  bro.quit()
  input('输入回车后继续:')
  def ck_save():#保存cookies
      with open('cookies_1.txt', 'w') as f:
          # 将cookies保存为json格式
          f.write(json.dumps(bro.get_cookies()))
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95

3.2 有头模式运行效果:

在这里插入图片描述

3.3 无头模式运行效果:

在这里插入图片描述

动图跟3.1比起来没有浏览器,只有日志输出,就不录了。

行动吧,在路上总比一直观望的要好,未来的你肯定会感 谢现在拼搏的自己!如果想学习提升找不到资料,没人答疑解惑时,请及时加入群: 759968159,里面有各种测试开发资料和技术可以一起交流哦。

最后: 下方这份完整的软件测试视频教程已经整理上传完成,需要的朋友们可以自行领取 【保证100%免费】

在这里插入图片描述

软件测试面试文档

我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/花生_TL007/article/detail/688629
推荐阅读
相关标签
  

闽ICP备14008679号