【Python】唯品会购买商品

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

实现代码如下:

 1 # coding=utf-8
 2 from selenium import webdriver
 3 from time import sleep
 4 import keyword
 5 from selenium.webdriver.common.keys import Keys
 6 from selenium.webdriver.support.wait import WebDriverWait
 7 from selenium.webdriver.support.ui import Select
 8 import csv
 9 import random
10 import io
11 
12 # 滚动滚动条`
13 def MoveScorllBar(driver, down, range1, range2):
14     moneCount = random.randint(range1, range2)
15     for num in range(1, moneCount):
16         if (down == "down"):
17             driver.find_element_by_xpath("//body").send_keys(Keys.DOWN)
18             sleep(random.uniform(0.1, 0.5))
19         else:
20             driver.find_element_by_xpath("//body").send_keys(Keys.UP)
21             sleep(random.uniform(0.1, 0.5))
22     return
23 
24 # 弹出新的浏览器窗口后,将之后的操作指向新的浏览器窗口
25 def SwitchWindow():
26     windows = driver.window_handles
27     driver.switch_to_window(windows[1])
28 
29 if __name__ == "__main__":
30 
31     #设置全局变量
32     a = '耐克Nike AIR JORDAN 1 MID 男子白色配银灰色篮球鞋'
33     num = '3'
34     datas=[]
35 
36     #打开浏览器,进入网站
37     driver = webdriver.Chrome()
38     driver.get("https://www.vip.com")
39     MoveScorllBar(driver, "down", 10, 30)
40     MoveScorllBar(driver, "up", 10, 30)
41 
42     #输入想要搜索的商品-->点击搜索按钮
43     driver.find_element_by_xpath("// *[ @ id = 'J-search'] / div[1] / input").send_keys(a)
44     driver.find_element_by_xpath("// *[ @ id = 'J-search'] / div[1] / a / span").click()
45 
46     # 进入商品详情页面
47     driver.find_element_by_css_selector('section#J_searchCatList div:nth-child(2)').click()
48     SwitchWindow()
49     MoveScorllBar(driver, "down", 10, 30)
50     MoveScorllBar(driver, "up", 10, 30)
51 
52     #统计页面上有多少个尺寸
53     lists=driver.find_element_by_xpath("//*[@id='J-sizeArea-wrap']/dd[2]/ul").find_elements_by_tag_name('li')
54     print(lists)
55     for list in lists:
56         a=list.get_attribute("class")
57         sizes = list.get_attribute("data-size-name")
58         #print(a)
59         if "disabled" in a:
60             print('这是个无效的的尺寸:%s' % sizes)
61         elif "selected" in a:
62             print('这是个已默认选择的或有机会的尺寸:%s' % sizes)
63 
64         else: #取上面if,elif外的其他所有情况
65             if sizes != None:
66                 print('已选尺寸:%s' % sizes)
67                 list.click()
68                 break
69 #由于选中尺寸之后,鼠标停在尺寸上会弹出来一个tip框,挡上了下面的选择数量的加号按钮,所以没办法click上加好,所以之后我们再次浏览商品,让鼠标立刻开尺寸处,露出下面的数量选择的加号按钮。
70     MoveScorllBar(driver, "down", 10, 30)
71     MoveScorllBar(driver, "up", 10, 30)
72     #选择数量
73     addbutton=driver.find_element_by_xpath("//*[@id='J-num-select']/dd[1]/a[2]")
74     print(addbutton)
75     addbutton.click()
76     sleep(3)
77     # 加入购物车
78     driver.find_element_by_class_name("ui-btn-loading-before").click()
79     print('主人,您购买的商品已经加入购物车了,快去付款吧~')
80     #driver.find_element_by_xpath("//*[@id='J-cartAdd-sizeID-1612349898']").click()
81     #driver.find_element_by_class_name("vipFont num-add J-num-act-add").click()

 从csv文件读取,写入csv文件

  1 # coding=utf-8
  2 from selenium import webdriver
  3 from time import sleep
  4 import keyword
  5 from selenium.webdriver.common.keys import Keys
  6 from selenium.webdriver.support.wait import WebDriverWait
  7 from selenium.webdriver.support.ui import Select
  8 import csv
  9 import random
 10 import io
 11 
 12 #文件路径
 13 inputFilePath = "F:scriptpy_scriptscsvfileRead.csv"
 14 outputFilePath = "F:scriptpy_scriptscsvfileOutput.csv"
 15 
 16 #读取csv文件
 17 def Readcsvfile(filePath):
 18     csvFile = open(filePath, "r")
 19     reader = csv.reader(csvFile)  # 返回的是迭代类型
 20     return reader
 21 
 22 #将读取的内容写入一个新的csv文档
 23 def Savecsvfile(filePath):
 24     csvFile2 = open(filePath, 'w', newline='')  # 设置newline,否则两行之间会空一行
 25     writer = csv.writer(csvFile2)
 26     writer.writerow(['GoodName'])
 27     writer.writerows(outputString)
 28     #csvfile.close()
 29 
 30 # 滚动滚动条`
 31 def MoveScorllBar(driver, down, range1, range2):
 32     moneCount = random.randint(range1, range2)
 33     for num in range(1, moneCount):
 34         if (down == "down"):
 35             driver.find_element_by_xpath("//body").send_keys(Keys.DOWN)
 36             sleep(random.uniform(0.1, 0.5))
 37         else:
 38             driver.find_element_by_xpath("//body").send_keys(Keys.UP)
 39             sleep(random.uniform(0.1, 0.5))
 40     return
 41 
 42 # 弹出新的浏览器窗口后,将之后的操作指向新的浏览器窗口
 43 def SwitchWindow():
 44     windows = driver.window_handles
 45     driver.switch_to_window(windows[1])
 46 
 47 if __name__ == "__main__":
 48 
 49     #设置全局变量
 50     #a = '耐克Nike AIR JORDAN 1 MID 男子白色配银灰色篮球鞋'
 51     #num = '3'
 52     outputString=[]
 53 
 54     goods = Readcsvfile(inputFilePath)
 55     for good in goods:
 56         goodName = good[0]
 57         print(goodName)
 58         #打开浏览器,进入网站
 59         driver = webdriver.Chrome()
 60         driver.get("https://www.vip.com")
 61         MoveScorllBar(driver, "down", 10, 30)
 62         MoveScorllBar(driver, "up", 10, 30)
 63 
 64         #输入想要搜索的商品-->点击搜索按钮
 65         driver.find_element_by_xpath("// *[ @ id = 'J-search'] / div[1] / input").send_keys(good[0])
 66         driver.find_element_by_xpath("// *[ @ id = 'J-search'] / div[1] / a / span").click()
 67 
 68         # 进入商品详情页面
 69         driver.find_element_by_css_selector('section#J_searchCatList div:nth-child(2)').click()
 70         SwitchWindow()
 71         MoveScorllBar(driver, "down", 10, 30)
 72         MoveScorllBar(driver, "up", 10, 30)
 73 
 74         #统计页面上有多少个尺寸
 75         lists=driver.find_element_by_xpath("//*[@id='J-sizeArea-wrap']/dd[2]/ul").find_elements_by_tag_name('li')
 76         print(lists)
 77         for list in lists:
 78             a=list.get_attribute("class")
 79             sizes = list.get_attribute("data-size-name")
 80             #print(a)
 81             if "disabled" in a:
 82                 print('这是个无效的的尺寸:%s' % sizes)
 83             elif "selected" in a:
 84                 print('这是个已默认选择的或有机会的尺寸:%s' % sizes)
 85 
 86             else: #取上面if,elif外的其他所有情况
 87                 if sizes != None:
 88                     print('已选尺寸:%s' % sizes)
 89                     list.click()
 90                     break
 91 
 92         MoveScorllBar(driver, "down", 10, 30)
 93         MoveScorllBar(driver, "up", 10, 30)
 94 
 95         #选择数量
 96         addbutton=driver.find_element_by_xpath("//*[@id='J-num-select']/dd[1]/a[2]")
 97         print(addbutton)
 98         addbutton.click()
 99         sleep(3)
100 
101         # 加入购物车
102         driver.find_element_by_class_name("ui-btn-loading-before").click()
103         print('主人,您购买的商品已经加入购物车了,快去付款吧~')
104         outputString.append([goodName])
105         driver.quit()
106     Savecsvfile(outputFilePath)
原文地址:https://www.cnblogs.com/zhuzhubaoya/p/9286311.html