偶然间想实现比价的功能,正常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. 【Redis】安装、开启以及关闭

    一.Linux环境的操作 1.1 下载安装 1.2 启动 1.3 连接Redis客户端 1.4 关闭 二.Windows和Mac下的操作 2.1 下载安装 2.2 启动 2.3 连接客户端 2.4 关 ...

  2. Java IO写文件效率

    写入方法: /** *1 按字节写入 FileOutputStream * * @param count 写入循环次数 * @param str 写入字符串 */ public void output ...

  3. Python数据库小程序

    源代码: # dict1 是 字典 , 用来对应相应元素的下标,我们将文件转成列表,对应的也就是文件的下标,通过下标来找文件元素 dict1 = {'sort':0 , 'name':1 ,'age' ...

  4. eclipse使用Gitlab

    1.生成SSH key 用的是eclipse自带的生成key的工具,windows->preferences->General->Network Connections->SS ...

  5. EventBus 消息的线程切换模型与实现原理

    一. 序 EventBus 是一个基于观察者模式的事件订阅/发布框架,利用 EventBus 可以在不同模块之间,实现低耦合的消息通信. EventBus 因为其使用简单且稳定,被广泛应用在一些生产项 ...

  6. 4、链栈的实现(java代码)

    1.链节点 public class Node<T> { public T data; public Node next; } 2.实现代码 public class Stack<T ...

  7. git windows 安装 - Github同步 / Vscode源代码管理:Git 安装操作

    github上创建立一个项目 登录github网站,在github首页,点击页面右下角"New Repository" 最后点击"Create Repository&qu ...

  8. 49 (OC)* layoutSubviews和drawRect调用

    layoutSubviews:  简单的说就是你如果想调用此方法.不要直接调用,需要调用setNeedsLayout方法来刷新布局! drawRect:刷新布局 一:layoutSubviews在以下 ...

  9. 什么是App推广技术?

    在移动互联网红利消失殆尽.市场竞争日趋激烈的背景下,App的推广越来越难了,如何去有效的进行推广,吸引更多的用户流量,成为了众多互联网企业最为关注的问题. 而App 推广技术指的就是通过一些技术的方式 ...

  10. tomcat启动出现乱码

    打开tomcat目录下apache-tomcat-9.0.26\conf\logging.properties 替换全文 encoding = UTF-8 为 encoding = GBK: rest ...