测试工具Selenium定向某音推广植入(图)

测试工具 创建于:2022-05-07
  
一、背景故事   那会儿,作者正在带薪拉屎...冥想,微信突然弹出前领导的一则消息,顿时心里有点小激动,以为是要拉兄弟一把,升职加薪!!!   结果一看,嗯,原来是个活儿,发过来一个视频,类似爬虫的桌面应用,从某音爬取数据,并找到对应评论的某人进行私信,以达到推广触达的效果!   可以说是批量给视频评论的人私信推销触达产品,如果他们找过来,最后完成交易,以达成转化为目的!问我实现的成本有多大?


  二、说干就干   第一点,对于爬虫这类事情,作者是即开心又紧张,心理总有些小兴奋<牢饭怎么样?>。   骗人的!!!   其实脑海里高速运转,立即给出多个解决方案:使用什么
技术呢?怎样才能更出色的做好呢?

 
 方案<即将安出>
  2.1、众周知爬虫还是python好,因为它有Scrapy,使用起来真的很棒、也很不错!!!   但是作者是个
测试工程师,不是爬虫工程师,爬虫只是一时的兴趣爱好!!!   重点是作者仅仅粗略自学过一段scrapy框架,现在要用起来还得从零开始。

 
 2.2、那么通过F12浏览器调试工具,可以使用接口来爬取数据吗?   结果大失所望!!!因为直接requests.get(url)请求会提示错误,并没有数据返回。   仔细一看发现请求参数中有个加密参数,所以每次
浏览器请求都会不一样,如果不知道规则,也就无法通过这种方式爬数据。

  
2.3、既然作者是枚测试人员,那么UI自动化测试中的selenium工具,是不是可以用呢?   是的,办法总比困难多。再不济,连接口请求都能拿来做爬虫呢。

 
 三、使用selenium来爬取某音的视频数据   前提条件:使用者必须有python基础及xpath语法且有自动化思想。   # 准备python+selenium环境;下载对应chrome浏览器的版本驱动;先准备一个demo测试一下,是否能正常使用!   from selenium import webdriver   driver=webdriver.Chrome(executable_path="../chromedriver.exe")   driver.implicitly_wait(30)   driver.maximize_window()   driver.get("http://www.baidu.com")   # do somethings   driver.quit()

  如果是目标明确,直接在浏览器中打开官网,搜索关键字得到url<如下代码演示>   '''   Created on 2021年7月22日   '''   import re   from time import sleep   from selenium import webdriver   # 初始化驱动对象    driver=webdriver.Chrome(executable_path="../chromedriver.exe")   driver.implicitly_wait(30)   driver.maximize_window()   # 打开目标网址    url="https://www.xxxxyin.com/search/%E4%B8%8A%E6%B5%B7%E6%95%B4%E5%9E%8B"   driver.get(url)   # 可能是反扒的原因,有拼图验证   sleep(5) # 这里手动,用于测试   # 可以使用图像处理,处理滑块验证    # 最后当然是使用无头模式   # 获取当前句柄,后面页面切换使用   # handler=driver.current_window_handle   # 获取当前结果页的所有元素集   video_pic=driver.find_elements_by_xpath("//div[@style='display: block;']/ul/li/div/a[1]")   # 计数器   i=1   for video in video_pic:       # 遍历点击元素       video.click()       # 获取浏览器所有句柄       handlers=driver.window_handles       # 切换最新的那一个       driver.switch_to_window(handlers[-1])              # 获取跳转页面元素:标题、点赞、评论、发布时间、用户名       titles=driver.find_elements_by_xpath("//div/div[2]/div[1]/div[1]/div[1]/div[2]/h1/span[2]/span/span/span/span")       if len(titles)>0:           title=""           for tit in titles:               title+=tit.text       else:           title="没有获取到完整的title"              # 随便用个表达式,先达到目的,再优化定位表达式       praise=driver.find_element_by_xpath("//div/div[2]/div[1]/div[1]/div[1]/div[2]/div/div[1]/div[1]/span").text       comment=driver.find_element_by_xpath("//div/div[2]/div[1]/div[1]/div[1]/div[2]/div/div[1]/div[2]/span").text       open_time=driver.find_element_by_xpath("//div/div[2]/div[1]/div[1]/div[1]/div[2]/div/div[2]/span").text              # 视频作者名称       username=driver.find_element_by_xpath("//div/div[2]/div[1]/div[2]/div/div[1]/div[2]/a/div/span/span/span/span/span")              # 点击用户名跳转用户详情页       username.click()              # 获取当前页的url地址后,就关闭当前页面       c_url=driver.current_url       driver.close() # 为什么关闭不了              param_url=c_url.split("?")[1] # 拆分url地址?拼接的参数       # 正则匹配,提取用户视频id、用户id       author_id=re.findall("(\d{11})",param_url)[0]       group_id=re.findall(r"(\d{19})",param_url)[0]              # 控制台输出结果       print("第{}条,视频title:{},作品id:{},用户id:{},评论数:{},点赞数:{},发布时间:{}".format(i,title,group_id,author_id,comment,praise,open_time))              # 切换第一页       driver.switch_to_window(handlers[0])              i+=1 # 计数器加1           # 退出driver驱动   driver.quit()

  将结果输出在控制台,爬取关键信息如下:   对比领导发过来视频操作的数据基本匹配,此处应该录屏动态展示效果会更好!
  
四、总结   从工具易用(完整)性来讲爬虫,selenium工具不如scrapy框架,主要体现在scrapy方便
数据库操作,功能更直接。   学习selenium爬虫成本更大:需要熟知元素定位方案,还需要解决更多ui层的问题;   连数据库建表都需要亲力亲为;可能还需要搭配其他框架来解决某些特定场景的问题。   从功能实现上来说,只要能快速解决问题的工具就是好工具,专业的工具做专业的事情,欢迎读者更多交流。


  
本文内容不用于商业目的,如涉及知识产权问题,请权利人联系51Testing小编(021-64471599-8017),我们将立即处理

权威发布,测试选择不纠结!第15届软件测试行业报告,直击行业发展,把握未来方向!

原文地址:http://www.51testing.com/?action-viewnews-itemid-6637650

免责声明:本文来源于互联网,版权归合法拥有者所有,如有侵权请公众号联系管理员

* 本站提供的一些文章、资料是供学习研究之用,如用于商业用途,请购买正版。

发表于:2022-5-07 09:58 作者:拜拜了您 来源:稀土掘金