zoukankan      html  css  js  c++  java
  • 【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)
  • 相关阅读:
    智能算法浅介模拟退火,遗传算法,禁忌搜索,神经网络等
    shell 字符串操作(长度,查找,替换)详解
    如何实现两个文件相减的功能(剔除)
    shell数值操作(四则运算,浮点数,科学计数法)awk,bc
    CUDA程序优化的记录
    随机化算法模拟退火
    (转)AspNetPager 样式以及使用(漂亮)
    (转)做项目时,如何做比较美观大方的数据输入窗体
    (转)26个Jquery使用小技巧(jQuery tips, tricks & solutions)
    (转)【译】Asp.net MVC并不仅仅只是Linq to SQL
  • 原文地址:https://www.cnblogs.com/zhuzhubaoya/p/9286311.html
Copyright © 2011-2022 走看看