【Python】唯品会购买商品
操作过程:唯品会进入之后,搜索商品,浏览网页,略掉不能选择的尺寸,选择之后,点击商品选择数量的加号,然后加入购物车。
实现代码如下:
# coding=utf-8
from selenium import webdriver
from time import sleep
import keyword
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support.ui import Select
import csv
import random
import io # 滚动滚动条`
def MoveScorllBar(driver, down, range1, range2):
moneCount = random.randint(range1, range2)
for num in range(1, moneCount):
if (down == "down"):
driver.find_element_by_xpath("//body").send_keys(Keys.DOWN)
sleep(random.uniform(0.1, 0.5))
else:
driver.find_element_by_xpath("//body").send_keys(Keys.UP)
sleep(random.uniform(0.1, 0.5))
return # 弹出新的浏览器窗口后,将之后的操作指向新的浏览器窗口
def SwitchWindow():
windows = driver.window_handles
driver.switch_to_window(windows[1]) if __name__ == "__main__": #设置全局变量
a = '耐克Nike AIR JORDAN 1 MID 男子白色配银灰色篮球鞋'
num = ''
datas=[] #打开浏览器,进入网站
driver = webdriver.Chrome()
driver.get("https://www.vip.com")
MoveScorllBar(driver, "down", 10, 30)
MoveScorllBar(driver, "up", 10, 30) #输入想要搜索的商品-->点击搜索按钮
driver.find_element_by_xpath("// *[ @ id = 'J-search'] / div[1] / input").send_keys(a)
driver.find_element_by_xpath("// *[ @ id = 'J-search'] / div[1] / a / span").click() # 进入商品详情页面
driver.find_element_by_css_selector('section#J_searchCatList div:nth-child(2)').click()
SwitchWindow()
MoveScorllBar(driver, "down", 10, 30)
MoveScorllBar(driver, "up", 10, 30) #统计页面上有多少个尺寸
lists=driver.find_element_by_xpath("//*[@id='J-sizeArea-wrap']/dd[2]/ul").find_elements_by_tag_name('li')
print(lists)
for list in lists:
a=list.get_attribute("class")
sizes = list.get_attribute("data-size-name")
#print(a)
if "disabled" in a:
print('这是个无效的的尺寸:%s' % sizes)
elif "selected" in a:
print('这是个已默认选择的或有机会的尺寸:%s' % sizes) else: #取上面if,elif外的其他所有情况
if sizes != None:
print('已选尺寸:%s' % sizes)
list.click()
break
#由于选中尺寸之后,鼠标停在尺寸上会弹出来一个tip框,挡上了下面的选择数量的加号按钮,所以没办法click上加好,所以之后我们再次浏览商品,让鼠标立刻开尺寸处,露出下面的数量选择的加号按钮。
MoveScorllBar(driver, "down", 10, 30)
MoveScorllBar(driver, "up", 10, 30)
#选择数量
addbutton=driver.find_element_by_xpath("//*[@id='J-num-select']/dd[1]/a[2]")
print(addbutton)
addbutton.click()
sleep(3)
# 加入购物车
driver.find_element_by_class_name("ui-btn-loading-before").click()
print('主人,您购买的商品已经加入购物车了,快去付款吧~')
#driver.find_element_by_xpath("//*[@id='J-cartAdd-sizeID-1612349898']").click()
#driver.find_element_by_class_name("vipFont num-add J-num-act-add").click()
从csv文件读取,写入csv文件


# coding=utf-8
from selenium import webdriver
from time import sleep
import keyword
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support.ui import Select
import csv
import random
import io #文件路径
inputFilePath = "F:\script\py_scripts\csvfileRead.csv"
outputFilePath = "F:\script\py_scripts\csvfileOutput.csv" #读取csv文件
def Readcsvfile(filePath):
csvFile = open(filePath, "r")
reader = csv.reader(csvFile) # 返回的是迭代类型
return reader #将读取的内容写入一个新的csv文档
def Savecsvfile(filePath):
csvFile2 = open(filePath, 'w', newline='') # 设置newline,否则两行之间会空一行
writer = csv.writer(csvFile2)
writer.writerow(['GoodName'])
writer.writerows(outputString)
#csvfile.close() # 滚动滚动条`
def MoveScorllBar(driver, down, range1, range2):
moneCount = random.randint(range1, range2)
for num in range(1, moneCount):
if (down == "down"):
driver.find_element_by_xpath("//body").send_keys(Keys.DOWN)
sleep(random.uniform(0.1, 0.5))
else:
driver.find_element_by_xpath("//body").send_keys(Keys.UP)
sleep(random.uniform(0.1, 0.5))
return # 弹出新的浏览器窗口后,将之后的操作指向新的浏览器窗口
def SwitchWindow():
windows = driver.window_handles
driver.switch_to_window(windows[1]) if __name__ == "__main__": #设置全局变量
#a = '耐克Nike AIR JORDAN 1 MID 男子白色配银灰色篮球鞋'
#num = '3'
outputString=[] goods = Readcsvfile(inputFilePath)
for good in goods:
goodName = good[0]
print(goodName)
#打开浏览器,进入网站
driver = webdriver.Chrome()
driver.get("https://www.vip.com")
MoveScorllBar(driver, "down", 10, 30)
MoveScorllBar(driver, "up", 10, 30) #输入想要搜索的商品-->点击搜索按钮
driver.find_element_by_xpath("// *[ @ id = 'J-search'] / div[1] / input").send_keys(good[0])
driver.find_element_by_xpath("// *[ @ id = 'J-search'] / div[1] / a / span").click() # 进入商品详情页面
driver.find_element_by_css_selector('section#J_searchCatList div:nth-child(2)').click()
SwitchWindow()
MoveScorllBar(driver, "down", 10, 30)
MoveScorllBar(driver, "up", 10, 30) #统计页面上有多少个尺寸
lists=driver.find_element_by_xpath("//*[@id='J-sizeArea-wrap']/dd[2]/ul").find_elements_by_tag_name('li')
print(lists)
for list in lists:
a=list.get_attribute("class")
sizes = list.get_attribute("data-size-name")
#print(a)
if "disabled" in a:
print('这是个无效的的尺寸:%s' % sizes)
elif "selected" in a:
print('这是个已默认选择的或有机会的尺寸:%s' % sizes) else: #取上面if,elif外的其他所有情况
if sizes != None:
print('已选尺寸:%s' % sizes)
list.click()
break MoveScorllBar(driver, "down", 10, 30)
MoveScorllBar(driver, "up", 10, 30) #选择数量
addbutton=driver.find_element_by_xpath("//*[@id='J-num-select']/dd[1]/a[2]")
print(addbutton)
addbutton.click()
sleep(3) # 加入购物车
driver.find_element_by_class_name("ui-btn-loading-before").click()
print('主人,您购买的商品已经加入购物车了,快去付款吧~')
outputString.append([goodName])
driver.quit()
Savecsvfile(outputFilePath)
【Python】唯品会购买商品的更多相关文章
- python入门之实例-购买商品
需求: 选择商品,结算所选的商品 #目前总资产 asset_all = 0 #所选商品总价 all_price = 0 #购物车列表,目前已选择商品 #每个元素的结构:"商品名": ...
- C 购买商品的游戏
1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <string.h> 4 /* 5 *模拟实现道具店购物 ...
- Java初学者作业——编写Java程序, 实现根据用户购买商品总金额, 计算实际支付的金额及所获得的购物券金额。
返回本章节 返回作业目录 需求说明: 编写Java程序, 实现根据用户购买商品总金额, 计算实际支付的金额及所获得的购物券金额. 购买总金额达到或超过 1000元,按 8折优惠,送 200元的购物券: ...
- 编写Java程序,用户在网上购买商品(good),当用户买了一本书(book)、一顶帽子(hat)或者买了一双鞋子(shoe),卖家就会通过物流将商品邮寄给用户,使用简单工厂模式模拟这一过程。
查看本章节 查看作业目录 需求说明: 编写Java程序,用户在网上购买商品(good),当用户买了一本书(book).一顶帽子(hat)或者买了一双鞋子(shoe),卖家就会通过物流将商品邮寄给用户, ...
- python杂记-3(购买商品)
#!/usr/bin/env python# -*- coding: utf-8 -*-#如下是一个购物程序:#先输入工资,显示商品列表,购买,quit退出,最后格式化输出所买的商品.count = ...
- Python基础-三次用户验证登录购买商品程序
需求: 一:三次登录锁定 1.用户信息存放于文件中 2.尝试三次都失败,锁定用户 二.购物车功能要求: 要求用户输入总资产,例如:2000显示商品列表,让用户根据序号选择商品,加入购物车购买,如果商品 ...
- python实现秒杀商品的微信自动提醒功能(附代码)
技术实现原理:获取京东的具体的商品信息,然后再使用微信发送提醒 工具:需要两个微信号,这两个微信号互为好友 如果你处于想学Python或者正在学习Python,Python的教程不少了吧,但是是最新的 ...
- python爬取商品信息
老严要爬某网购网站的商品信息,正好我最近在学python,就一起写了一个简单的爬虫程序. 需求:某网的商品信息,包括商品名,市场价和售价 工具:python2.7.8,urllib2,re #codi ...
- Python 爬虫 JD商品-scrapy+requests
目标站点需求分析 JD商品信息抓取 需求信息字段 涉及的库 scrapy, requests,re lxml 获取单页源码 解析单页源码 获取总页数 获取商品url 解析商品信息 保存本地文件 保存m ...
随机推荐
- Linux中的邮件发送
这里写出两种常用的邮件发送方式: mail: 需要安装sendmail和postfix两个服务 编辑/etc/mail.rc,在最后添加 set from=scottcho@126.com smtp= ...
- 集群瓶颈为什么是磁盘io
阅读本文思考: 1.对磁盘IO了解多少 2.为什么是磁盘IO是瓶颈,有没有自己的答案 想了解磁盘io可以查看此帖:集群瓶颈:磁盘IO必读 (磁盘IO:磁盘输出输出) 集群的瓶颈提出多种看法,其中网络和 ...
- N76E003系统时钟
系统时钟源N76E003共有3种系统时钟源,包括: 内部高速/低速振荡器.外部输入时钟.它们每一个都可以作为N76E003的系统时钟源.开启不同的时钟源可能会影响到多功能引脚P3.0/XIN .内部振 ...
- spring boot配置文件application.propertis
转自http://www.qiyadeng.com/post/spring-boot-application-properties 本文记录Spring Boot application.proper ...
- codeforces水题100道 第十二题 Codeforces Beta Round #91 (Div. 2 Only) A. Lucky Division (brute force)
题目链接:http://www.codeforces.com/problemset/problem/122/A题意:判断一个数是否能被一个lucky number整除,一个lucky number是一 ...
- STL源码剖析—顺序容器
一.vector 1.vector简介: vector的数据安排及其操作方式与数组非常相似,微小的差别在于空间的使用,数组是静态空间,一旦配置了就不能改变.vector是动态空间,随着元素的加入,它的 ...
- 【vue基础学习】vue.js开发环境搭建
1.安装node.js(http://www.runoob.com/nodejs/nodejs-install-setup.html) 2.基于node.js,利用淘宝npm镜像安装相关依赖 在cmd ...
- shell截取字符串的一些简单方法
一.使用${} 1.${var##*/}该命令的作用是去掉变量var从左边算起的最后一个'/'字符及其左边的内容,返回从左边算起的最后一个'/'(不含该字符)的右边的内容.使用例子及结果如下:
- 金蝶KIS问题解决汇总
1.帐套结转时,提示t_subsys插入重复键 解决: I.删除索引 alter table t_subsys drop constraint pk_subsys II.t_rp_initial表 ...
- python函数定义语法总结
见下面代码及注释: def calc(value): sum=0 for m in value: sum=sum+m return sum data=[1,2,3,4,5,6,7,8,9,10] pr ...