操作过程:唯品会进入之后,搜索商品,浏览网页,略掉不能选择的尺寸,选择之后,点击商品选择数量的加号,然后加入购物车。

实现代码如下:

 # 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】唯品会购买商品的更多相关文章

  1. python入门之实例-购买商品

    需求: 选择商品,结算所选的商品 #目前总资产 asset_all = 0 #所选商品总价 all_price = 0 #购物车列表,目前已选择商品 #每个元素的结构:"商品名": ...

  2. C 购买商品的游戏

    1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <string.h> 4 /* 5 *模拟实现道具店购物 ...

  3. Java初学者作业——编写Java程序, 实现根据用户购买商品总金额, 计算实际支付的金额及所获得的购物券金额。

    返回本章节 返回作业目录 需求说明: 编写Java程序, 实现根据用户购买商品总金额, 计算实际支付的金额及所获得的购物券金额. 购买总金额达到或超过 1000元,按 8折优惠,送 200元的购物券: ...

  4. 编写Java程序,用户在网上购买商品(good),当用户买了一本书(book)、一顶帽子(hat)或者买了一双鞋子(shoe),卖家就会通过物流将商品邮寄给用户,使用简单工厂模式模拟这一过程。

    查看本章节 查看作业目录 需求说明: 编写Java程序,用户在网上购买商品(good),当用户买了一本书(book).一顶帽子(hat)或者买了一双鞋子(shoe),卖家就会通过物流将商品邮寄给用户, ...

  5. python杂记-3(购买商品)

    #!/usr/bin/env python# -*- coding: utf-8 -*-#如下是一个购物程序:#先输入工资,显示商品列表,购买,quit退出,最后格式化输出所买的商品.count = ...

  6. Python基础-三次用户验证登录购买商品程序

    需求: 一:三次登录锁定 1.用户信息存放于文件中 2.尝试三次都失败,锁定用户 二.购物车功能要求: 要求用户输入总资产,例如:2000显示商品列表,让用户根据序号选择商品,加入购物车购买,如果商品 ...

  7. python实现秒杀商品的微信自动提醒功能(附代码)

    技术实现原理:获取京东的具体的商品信息,然后再使用微信发送提醒 工具:需要两个微信号,这两个微信号互为好友 如果你处于想学Python或者正在学习Python,Python的教程不少了吧,但是是最新的 ...

  8. python爬取商品信息

    老严要爬某网购网站的商品信息,正好我最近在学python,就一起写了一个简单的爬虫程序. 需求:某网的商品信息,包括商品名,市场价和售价 工具:python2.7.8,urllib2,re #codi ...

  9. Python 爬虫 JD商品-scrapy+requests

    目标站点需求分析 JD商品信息抓取 需求信息字段 涉及的库 scrapy, requests,re lxml 获取单页源码 解析单页源码 获取总页数 获取商品url 解析商品信息 保存本地文件 保存m ...

随机推荐

  1. [NodeJS] Node.js 与 V8 的故事

    要说Node.js的历史,就不得不说说V8历史.在此之前我们先一句话描述一下什么是Node.js:Node.js是一个基于Google Chrome V8 Javascript引擎之上的平台,用以创建 ...

  2. 团购已满,O2O只是个笑话吗?

    团购的用户习惯经过多年的“发酵”以后,大多数用户的团购习惯已经养成,同样一张电影票团购和直接现场购买的差价在一倍以上,当然O2O领域的其他情况也差不多,面对明显的“优惠”,用户当然乐意使用团购服务. ...

  3. LINUX分辨率修改

    上次说过了如何搭建LINUX虚拟机环境,但是完成之后存在很多问题,屏幕分辨太小就是其中之一. 为了让各位能有一个舒心的工作环境,现在就教给大家LINUX系统更改屏幕分辨率的两个办法. 一.鼠标操作 1 ...

  4. 节日换肤通用技术方案__iOS端实现

    一.问题的提出 不知道大家有没有发现, 元旦期间, 很多APP界面里的图标都换成了具有节日气氛的样式, 而在过了元旦节之后, 这些图标又悄无声息的变回了本来的面貌. 这些具有短暂生命周期.而又必须在固 ...

  5. Find–atime –ctime –mtime的用法与区别总结

    转自 周五有同事问起find命令中-mtime n.-mtime –n以及-mtime +n的用法区别,当时虽然记得这里n是n个24个小时的意思,也是对所有这几个属性详细的用法却一知半解,索性周末仔细 ...

  6. spy-debugger 前端调试工具

    一站式页面调试.抓包工具.远程调试任何手机浏览器页面,任何手机移动端webview(如:微信,HybirdApp等).支持HTTP/HTTPS,无需USB连接设备.    Language: Engl ...

  7. Android 1.6 PackageManagerService源码分析

    文件清单 framework\base\services\core\java\com\android\server\pm\PackageManagerService.java PackageManag ...

  8. 【CF653G】Move by Prime 组合数

    [CF653G]Move by Prime 题意:给你一个长度为n的数列$a_i$,你可以进行任意次操作:将其中一个数乘上或者除以一个质数.使得最终所有数相同,并使得操作数尽可能小.现在我们想要知道$ ...

  9. 【CF802C】Heidi and Library (hard) 费用流

    [CF802C]Heidi and Library (hard) 题意:有n个人依次来借书,第i人来的时候要求书店里必须有种类为ai的书,种类为i的书要花费ci块钱购入.而书店的容量只有k,多余的书只 ...

  10. [Windows] 使用SC 命令管理与配置服务

    sc config wuauserv start= demand sc config wuauserv start= disabled