操作过程:唯品会进入之后,搜索商品,浏览网页,略掉不能选择的尺寸,选择之后,点击商品选择数量的加号,然后加入购物车。
实现代码如下:
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:\script\py_scripts\csvfileRead.csv"
14 outputFilePath = "F:\script\py_scripts\csvfileOutput.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)