偶然间想实现比价的功能,正常requests途径比较难实现,于是乎想到可以selenium可以简易实现,下面是代码。

import requests
from selenium import webdriver
import json
import time
import threading import matplotlib.pyplot as plt
import numpy as np s = str(raw_input('请输入要比价内容:'))
print s
list = [] #京东价格,主要是selenium模拟,定位搜索框然后输入比价内容。其中还有error的处理。
def jd(s):
driver = webdriver.Chrome()
driver.get('https://www.jd.com/')
driver.find_element_by_id('key').send_keys(s.decode('gbk'))
driver.find_element_by_xpath('//*[@id="search"]/div/div[2]/button').click()
time.sleep(2)
try:
print "京东价格:",driver.find_element_by_xpath('//*[@id="J_goodsList"]/ul/li[1]/div/div[3]/strong/i').text
print "京东价格:",driver.find_element_by_xpath('//*[@id="J_goodsList"]/ul/li[1]/div/div[7]/span/a').text
list.append(driver.find_element_by_xpath('//*[@id="J_goodsList"]/ul/li[1]/div/div[3]/strong/i').text)
except:
print "京东价格:",driver.find_element_by_xpath('//*[@id="J_goodsList"]/ul/li[1]/div/div[2]/strong/i').text
print "京东价格:",driver.find_element_by_xpath('//*[@id="J_goodsList"]/ul/li[1]/div/div[5]/span/a').text
list.append(driver.find_element_by_xpath('//*[@id="J_goodsList"]/ul/li[1]/div/div[2]/strong/i').text)
finally:
driver.quit()

#淘宝价格,跟京东类似
def taobao(s):
driver = webdriver.Chrome()
driver.get('https://www.taobao.com/')
driver.find_element_by_id('q').send_keys(s.decode('gbk'))
driver.find_element_by_xpath('//*[@id="J_TSearchForm"]/div[1]/button').click()
time.sleep(2)
try:
print "淘宝价格:",driver.find_element_by_xpath('//*[@id="mainsrp-itemlist"]/div/div/div[1]/div[1]/div[2]/div[1]/div[1]/strong').text
list.append(driver.find_element_by_xpath('//*[@id="mainsrp-itemlist"]/div/div/div[1]/div[1]/div[2]/div[1]/div[1]/strong').text)
except:
print "淘宝价格:",driver.find_element_by_xpath('//*[@id="J_itemlistListItem0"]/div[2]/p/a').text
print "淘宝价格:",driver.find_element_by_xpath('//*[@id="J_itemlistListItem0"]/div[3]/div[1]/span/strong').text list.append(driver.find_element_by_xpath('//*[@id="J_itemlistListItem0"]/div[3]/div[1]/span/strong').text)
finally:
driver.quit() #亚马逊价格
def amz(s):
driver = webdriver.Chrome()
driver.get('https://www.amazon.cn/')
driver.find_element_by_id('twotabsearchtextbox').send_keys(s.decode('gbk'))
driver.find_element_by_xpath('//*[@id="nav-search"]/form/div[2]/div/input').click()
time.sleep(2)
print "亚马逊价格:",driver.find_element_by_xpath('//*[@id="result_0"]/div/div[4]/div[1]/a/span[2]').text
list.append(driver.find_element_by_xpath('//*[@id="result_0"]/div/div[4]/div[1]/a/span[2]').text.replace(',','')[1:])
driver.quit() #用到多线程处理。
threads = []
t1 = threading.Thread(target=jd,args=(s,))
threads.append(t1)
t2 = threading.Thread(target=taobao,args=(s,))
threads.append(t2)
t3 = threading.Thread(target=amz,args=(s,))
threads.append(t3)
for i in range(len(threads)):
threads[i].start()
for i in range(len(threads)):
threads[i].join()
print list #图像展示
list = [int(i.split('.')[0]) for i in list]
index=np.arange(3) plt.bar(left=index,height=list,width=0.5)
plt.xticks((0,1,2),('Jd','Taobao','Amazon'))
plt.show()

效果图:

简单的功能实现了,不足之处(有待改善):

1、等待时间太长,体验不佳,即使多线程也要18s左右才能返回结果,太慢。

2、开3个webdriver,占用资源有点多,也导致比较慢。

3、错误处理未完善。

关于Python selenium实现类似比价软件的功能的更多相关文章

  1. Python+selenium整合自动发邮件功能

    主要实现的目的是:自动将测试报告以邮件的形式通知相关人员 from HTMLTestRunner import HTMLTestRunner import HTMLTestReport from em ...

  2. python面向对象进阶 反射 单例模式 以及python实现类似java接口功能

    本篇将详细介绍Python 类的成员.成员修饰符.类的特殊成员. 类的成员 类的成员可以分为三大类:字段.方法和特性. 注:所有成员中,只有普通字段的内容保存对象中,即:根据此类创建了多少对象,在内存 ...

  3. python+selenium,实现带有验证码的自动化登录功能

    python+selenium的环境准备,请自行安装完成,这里直接贴代码,方便做项目时直接使用. import time from selenium import webdriver from PIL ...

  4. python selenium 元素定位(三)

    上两篇的博文中介绍了python selenium的环境搭建和编写的第一个自动化测试脚本,从第二篇的例子中看出来再做UI级别的自动化测试的时候,有一个至关重要的因素,那就是元素的定位,只有从页面上找到 ...

  5. Python+Selenium基础篇之1-环境搭建

    Python + Selenium 自动化环境搭建过程 1. 所需组建 1.1 Selenium for python 1.2 Python 1.3 Notepad++ 作为刚初学者,这里不建议使用P ...

  6. WEB自动化(Python+selenium)的API

    在做Web自动化过程中,汇总了Python+selenium的API相关方法,给公司里的同事做了第二次培训,分享给大家                                         ...

  7. python+selenium 自动化测试实战

    一.前言: 之前的文章说过, 要写一篇自动化实战的文章, 这段时间比较忙再加回家过11一直没有更新博客,今天整理一下实战项目的代码共大家学习.(注:项目是针对我们公司内部系统的测试,只能内部网络访问, ...

  8. web自动化 基于python+Selenium+PHP+Ftp实现的轻量级web自动化测试框架

    基于python+Selenium+PHP+Ftp实现的轻量级web自动化测试框架   by:授客 QQ:1033553122     博客:http://blog.sina.com.cn/ishou ...

  9. Python+Selenium学习--自动化测试模型

    前言 一个自动化测试框架就是一个集成体系,在这一体系中包含测试功能的函数库.测试数据源.测试对象识别标准,以及种可重用的模块.自动化测试框架在发展的过程中经历了几个阶段,模块驱动测试.数据驱动测试.对 ...

随机推荐

  1. [转]Linux系统结构

    Linux系统一般有4个主要部分:内核.shell.文件系统.应用程序. 内核.shell和文件系统一起形成了基本的操作系统结构,它们使得用户可以运行程序.管理文件并使用系统. 1.linux内核 内 ...

  2. Java服务器-Disruptor使用注意

    最近看了一下部署游戏后台的服务器状况,发现我的一个Java程序其占用的CPU时长超过100%,排查后发现竟是Disruptor引起的,让我们来看看究竟为什么Disruptor会有这样的表现. 发现占用 ...

  3. Spring中常用的23中设计模式

    1.spring 中常用的设计模式有23中  分类  设计模式  创建型 工厂方法模式(FactoryMethod).抽象工厂模式(AbstractFactory).建造者模式(Builder).原型 ...

  4. 【Nginx】基础学习概览【汇总】

    一.Nginx 简介安装启动 二.Nginx的应用场景 三.Nginx中的配置命令 四.实现动态负载均衡 五.四层负载均衡 六.主从热备 七.动静分离 一.Nginx 简介安装启动 [Nginx]简介 ...

  5. 【Spring】容器刷新(refresh)流程解析

    一.概述 二.prepareRefresh() 三.obtainFreshBeanFactory() 四.prepareBeanFactory(beanFactory); 五.postProcessB ...

  6. 2018阿里-研发工程师JAVA Software Engineer, Java

    岗位描述Job Description如果你想了解JAVA开发在阿里巴巴互联网生态系统中无与伦比的应用广度与深度: 如果你对基础技术感兴趣,你可以参与基础软件的设计.开发和维护,如分布式文件系统.缓存 ...

  7. java对象与json字符串的互相转换

    java对象与json字符串的互相转换 1.采用 net.sf.json.JSONObject maven依赖包: <dependency> <groupId>net.sf.j ...

  8. Vert.x Web之Router

    Vert.x Web 是一系列用于基于 Vert.x 构建 Web 应用的构建模块. Vert.x Web 的大多数特性被实现为了处理器(Handler),因此您随时可以实现您自己的处理器.我们预计随 ...

  9. Mybatis系列(二)配置

    Mybatis系列(二)配置 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE configu ...

  10. 关于volatile关键字的最佳解释

    直接放原博主链接,真的写得非常好,看懂这个面试官问再多也不怕了: https://www.cnblogs.com/dolphin0520/p/3920373.html Java并发编程:volatil ...