偶然间想实现比价的功能,正常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. tomcat部署项目,war包问题

    tomcat部署项目后,war包是否能删除 答案是能删除的,前提是先停掉tomcat后才能删除 1)在tomcat中webapps目录下上传war包后,对war包自动解压 2)war包不能在tomca ...

  2. JavaScript入门之AJAX:原生ajax

    背景 传统的Web应用允许用户端填写表单(form),当提交表单时就向网页服务器发送一个请求.服务器接收并处理传来的表单,然后送回一个新的网页,但这个做法浪费了许多带宽,因为在前后两个页面中的大部分H ...

  3. 2019 Multi-University Training Contest 2

    2019 Multi-University Training Contest 2 A. Another Chess Problem B. Beauty Of Unimodal Sequence 题意 ...

  4. 18年ACM赛后总结

    今天,我们浙理养老队在18年赛季的比赛正式宣布结束了,先恭喜我们队在3场区域赛中拿了两块金牌,一块银牌,损失我的身份证我的U盘我的耳机,老天啊,队友不是拿来顶替自己的霉运的嘛,让他们的丢东西啊,别让我 ...

  5. codeforces 762 D. Maximum path(dp)

    题目链接:http://codeforces.com/problemset/problem/762/D 题意:给出一个3*n的矩阵然后问从左上角到右下角最大权值是多少,而且每一个点可以走上下左右,但是 ...

  6. hud 3555 Bomb 数位dp

    Bomb Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/65536 K (Java/Others) Total Subm ...

  7. Springboot源码分析之TypeFilter魔力

    摘要: 在平常的开发中,不知道大家有没有想过这样一个问题,为什么我们自定义注解的时候要使用spring的原生注解(这里指的是类似@Component,@Service........),要么就是 随便 ...

  8. 为什么你应该学习Go语言?

    终于等到你!Go语言--让你用写Python代码的开发效率编写C语言代码. 为什么互联网世界需要Go语言 世界上已经有太多太多的编程语言了,为什么又出来一个Go语言? 硬件限制:摩尔定律已然失效 摩尔 ...

  9. 010 深入理解Python语言

    目录 一.概述 二.计算机技术的演进 2.1 计算机技术的演进过程 三.编程语言的多样初心 3.1 编程语言有哪些? 3.2 不同编程语言的初心和适用对象 3.3 2018年以后的计算环境- 四.Py ...

  10. Java复习:集合框架(一张图)

    最后一个看不见了补充一下: ConcurrentHashMap:是线程安全的(基于lock实现的,同步的时候锁住的不是整个对象,而加了synchronized的是锁住了整个的对象),实现了Map接口, ...