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