【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 ...
随机推荐
- Android分包原理
如果App引用的库太多,方法数超过65536后无法编译.这是因为单个dex里面不能有超过65536个方法.为什么有最大的限制呢,因为Android会把每一个类的方法id检索起来,存在一个链表结构里面. ...
- 2014 华为校招机试题(c/c++开发类)
第一题: 1.2.3....n盏灯,同时有n个人, 第1个人将1的倍数的灯拉一下, 第2个人将2的倍数的灯拉一下, ...... 问最后有几盏灯是亮的, 初始状态下灯是灭的, 输入整数n(n<6 ...
- Androidの疑难杂症之加载布局报Error inflating class <unknown>
android.view.InflateException: Binary XML file line #12: Error inflating class <unknown> 出现这种错 ...
- Android 性能分析工具 TraceView
官方地址 http://developer.android.com/tools/debugging/debugging-tracing.html 推荐:http://blog.csdn.net/inn ...
- 解决win764位安装pycrypto遇到unable to find vcvarsall.bat 问题
今天安装pycrypto的库.安装中遇到一些问题,这里简单记录下来. 首先安装python,pycrypto是基于python的一个库. 第一种:搜索关键字pycrypto,找到pycrypto的官方 ...
- CF 217A Ice Skating
A. Ice Skating time limit per test 2 seconds memory limit per test 256 megabytes input standard inpu ...
- Windows正向绑定shell和反向反弹shell的Python代码
Windows下的shell原理 经过查阅资料,使用os.dup2(nfd, ofd)的方式重定向socket的输入输出到windows系统的cmd是无法做到的,属于系统原因,不能直接复制Linux下 ...
- GitStack系统RCE漏洞学习
漏洞简介 漏洞简情 漏洞程序 GitStack 影响版本 <=2.3.10 漏洞类型 RCE 漏洞评价 高危 漏洞编号 CVE-2018-5955 漏洞程序介绍 GitStack是一款基于Pyt ...
- Microsoft Office Enterprise 2007 在安装过程中出错的解决方法
今天笔者在使用PowerPoint 2007打开一个ppt的内嵌的excel表格时报如下错误: 无法找到 服务器应用程序.源文件.和项目,或返回的未知错误.请重新安装服务程序 然后就先把ppt文件发给 ...
- s3接口认证说明
S3 Authorization太绕,太头痛,下面解释说明: XS3 REST API基于HMAC(哈希消息身份验证码)密钥使用自定义HTTP方案进行身份验证.要对请求进行身份验证,您首先需要合并请求 ...