Selenium+webdriver自动化测试

背景

最近有一项课题就是找出上海市所有小区(楼盘)名称,形成上海小区字典库,手里有一些从第三方网站获取下来的数据,但是数据不规范,且有重复,也不完备,另外自己机构也有一部分数据,也存在同样的问题,如何让这些数据拼凑在一起尽可能的形成上海小区字典库。为了诉述方便,假设上海有楼盘共 N N 个(不重复),设为集合 S \mathbb{S} ,从第三方网站获取下来的楼盘共 n n 个(有重复),设为集合 S 1 \mathbb{S_1} ; 自己机构有楼盘 m m 个(有重复)设为集合 S 2 \mathbb{S_2} ,不妨假设1 S 1 + S 2 > S |\mathbb{S_1}|+|\mathbb{S_2}|>|\mathbb{S}| , 现在要做的有

  1. 核对 S 1 \mathbb{S_1} 中的 n n 个小区是否真实存在,核对 S 2 \mathbb{S_2} 中的 m m 个小区是否真实存在。
  2. 利用集合论知识将 S 1 \mathbb{S_1} S 2 \mathbb{S_2} 拼在一起,形成新集合 S \mathbb{S'}
  3. 评估集合 S \mathbb{S'} 与集合 S \mathbb{S} 的差距。
    这次只探讨如何利用Selenium+webdriver自动化测试技术去核实小区数据的真实性。

Selenium+webdriver自动化测试

主要是用百度地图核查 S 1 \mathbb{S_1} S 2 \mathbb{S_2} 中的小区是否真实存在,利用Selenium+webdriver自动化测试每个小区的名称,如果百度地图返回结果,取第一个标准楼盘名,如果没有返回,则判定是无效楼盘名,利用返回的结构形成新的集合 S 1 \mathbb{S'_1 } S 2 \mathbb{S'_2} ,且满足 S 1 > S 1 |\mathbb{S_1}|>|\mathbb{S'_1}| S 2 > S 2 |\mathbb{S_2}|>|\mathbb{S'_2}|

完整代码

# -*- coding: utf-8 -*-
"""
Created on Tue Jul  9 16:14:16 2019
title: Selenium+webdriver自动化测试
@author: Uncle Three
"""

import pandas as pd #导入数据分析模块
from selenium import webdriver
from tqdm import tqdm #进度监测
data=pd.read_excel("community.xlsx",index_col="id") #读取数据
#data=data1.dropna()#过滤空值
building=data['sLoupan'] #楼盘
address=data['sAddress'] #地址
community=data['sXqName'] #机器匹配出的小区名

def get_community(loupan): #定义输入自己这边小区获取百度的标准小区名称函数
    driver=webdriver.Chrome()
    driver.get("https://map.baidu.com/@13523265.31,3641114.64,12z") #打开百度地图
    driver.implicitly_wait(10)#设置隐性等待时间
    input=driver.find_element_by_id('sole-input')#输入框
    input.send_keys(loupan)
    driver.find_element_by_id("search-button").click()   #点击查询
    driver.implicitly_wait(10)#设置隐性等待时间
    result=driver.find_element_by_xpath('//ul[@class="poilist"]/li[1]//div[@class="row"]//a').get_attribute('textContent') #第一个返回结果 
    driver.close()
    return result

results=[] #用来存放查询结果
for i in tqdm(building):
    try:
        result=get_community(i) #调用get_community函数
        results.append(result)     #追加返回结果
    except:
        results.append("") #如果没有返回结果追加为空值
        print("the %s is not found" %(i))
results=pd.concat([data,pd.Series(results,index=data.index)],axis=1)
results.columns=list(data.columns)+[u'result'] #重命名表头
results.to_excel("output1.xlsx") #保存为excel文件

问题反思

Selenium+webdriver自动化测试虽然很酷炫,但是效率却不高,平均12秒返回一个结果,如果手里数据上万条肯定是不现实的,可以改进的方向有只打开一次网页,然后不断的在里面输入查找的小区,获取小区,然后擦出前一次的输入,输入下一个要查找的小区,这样效率会高一点,第一次接触到webdriver,如果你们有更好的调用办法,请留言告知。


  1. 绝对值符号表示集合里面元素的个数,叫做集合的势,如果集合 S \mathbb{S} 有10000个元素的话,那么可以记作 S = 10000 |\mathbb{S}|=10000 ↩︎

发布了45 篇原创文章 · 获赞 12 · 访问量 8691

猜你喜欢

转载自blog.csdn.net/zengbowengood/article/details/95449036