【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 ...
随机推荐
- es5.0 安装ik中文分词器 mac
es5.0集成ik中文分词器,网上资料很多,但是讲的有点乱,有的方法甚至不能正常运行此插件 特别注意的而是,es的版本一定要和ik插件的版本相对应: 1,下载ik 插件: https://github ...
- IntelliJ IDEA:Field injection is not recommended
使用IntelliJ IDEA进行开发的时候,code analyze的时候会出现提示“Field injection is not recommended”. stackoverflow上有篇回答: ...
- 剑指offer面试题7:用两个栈实现队列
题目1:用两个栈来实现一个队列,完成队列的Push和Pop操作. 队列中的元素为int类型. 代码实现: public class Solution07 { Stack<Integer> ...
- 《转载》renameTo文件在windows环境下可以,在linux中报错
以前我一直以为File#renameTo(File)方法与OS下面的 move/mv 命令是相同的,可以达到改名.移动文件的目的.不过后来经常发现问题:File#renameTo(File)方法会返回 ...
- Get方法和post方法有何不同?
Get方法和post方法有何不同? 在B/S应用程序中,前台与后台的数据交互,都是通过HTML中Form表单完成的.Form提供了两种数据传输的方式——get和post.虽然它们都 是数据的提交方式, ...
- open-falcon之HBS
功能 处理agent心跳请求,并将agent信息(ip.hostname.agent_version.plugin_version)等信息入库(portal库) 为agent提供执行run api的白 ...
- 【MD5加密】MD5加密编码的坑
MD5 MD5即Message-Digest Algorithm (信息-摘要算法5),用于确保信息传输完整一致. 是计算机广泛使用的杂凑算法之一(又译摘要算法.哈希算法),主流编程语言普遍已有MD5 ...
- String 类实现 以及>> <<流插入/流提取运算符重载
简单版的String类,旨在说明>> <<重载 #include <iostream> //#include <cstring>//包含char*的字符 ...
- Implicit conversion from enumeration type 'enum CGImageAlphaInfo' to different enumeration type 'CGBitmapinfo' (aka) 'enum CGBitmapInfo')
The constants for specifying the alpha channel information are declared with the CGImageAlphaInfo ty ...
- 在稳定性测试中,将测试结果持续填加进入html报告
公司需要设计一个稳定性测试,就是一直持续的跑不同的用例,直到人为停止,用例基本完成,基本框架思路就是随机选择一个testcase,跑完后输出结果.但存在一个问题,现在的unittest或nose测试报 ...