私信小编01即可获取大量Python学习资料
Tip:本文仅供学习与交流,切勿用于非法用途!!!
有个同学问我:“XXX,有没有办法搜集一下淘宝的商品信息啊,我想要做个统计”。于是乎,闲来无事的我,又开始琢磨起这事…
俗话说,实践出真知~
小的在这给大家安利一套《2020最新企业Pyhon项目实战》视频教程,点击此处即可获取,希望大家一起进步哦。
兴致勃勃的我,冲进淘宝就准备一顿乱搜:
在搜索栏里填好关键词:“显卡”,小手轻快敲击着回车键(小样~看我的)
心情愉悦的我等待着返回满满的商品信息,结果苦苦的等待换了的却是302,于是我意外地来到了登陆界面。
情况基本就是这么个情况了…
然后我查了一下,随着淘宝反爬手段的不断加强,很多小伙伴应该已经发现,淘宝搜索功能是需要用户登陆的!
关于淘宝模拟登陆,有大大已经利用requests成功模拟登陆(感兴趣的小伙伴请往这边>>>requests登陆淘宝<<<)
这个方法得先分析淘宝登陆的各种请求,并模拟生成相应的参数,相对来说有一定的难度。于是我决定换一种思路,通过selenium+二维码的方式:
# 打开图片
def Openimg(img_location):
img=Image.open(img_location)
img.show()
# 登陆获取cookies
def Login():
driver=webdriver.PhantomJS()
driver.get('https://login.taobao.com/member/login.jhtml')
try:
driver.find_element_by_xpath('//*[@id="login"]/div[1]/i').click()
except:
pass
time.sleep(3)
# 执行JS获得canvas的二维码
JS='return document.getElementsByTagName("canvas")[0].toDataURL("image/png");'
im_info=driver.execute_script(JS) # 执行JS获取图片信息
im_base64=im_info.split(',')[1] #拿到base64编码的图片信息
im_bytes=base64.b64decode(im_base64) #转为bytes类型
time.sleep(2)
with open('./login.png','wb') as f:
f.write(im_bytes)
f.close()
t=threading.Thread(target=Openimg,args=('./login.png',))
t.start()
print("Logining...Please sweep the code!\n")
while(True):
c=driver.get_cookies()
if len(c) > 20: #登陆成功获取到cookies
cookies={}
for i in range(len(c)):
cookies[c[i]['name']]=c[i]['value']
driver.close()
print("Login in successfully!\n")
return cookies
time.sleep(1)
通过webdriver打开淘宝登陆界面,把二维码下载到本地并打开等待用户扫码(相应的元素大家通过浏览器的F12元素分析很容易就能找出)。待扫码成功后,将webdriver里的cookies转为DICT形式,并返回。(这里是为了后续requests爬取信息的时候使用)
当我拿到cookies之后,便能对商品信息进行爬取了。
(小样 ~我来啦)
定义相应的请求地址,请求头等等:
# 定义参数
headers={'Host':'s.taobao.com',
'User-Agent':'Mozilla/5.0 (Windows NT 6.3; Win64; x64; rv:63.0) Gecko/20100101 Firefox/63.0',
'Accept':'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
'Accept-Language':'zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2',
'Accept-Encoding':'gzip, deflate, br',
'Connection':'keep-alive'}
list_url='http://s.taobao.com/search?q=%(key)s&ie=utf8&s=%(page)d'
12345678
当请求得到HTML页面后,想要得到我们想要的数据就必须得对其进行提取,这里我选择了正则的方式。通过查看页面源码:
偷懒的我上面只标志了两个数据,不过其他也是类似的,于是得到以下正则:
# 正则模式
p_title='"raw_title":"(.*?)"' #标题
p_location='"item_loc":"(.*?)"' #销售地
p_sale='"view_sales":"(.*?)人付款"' #销售量
p_comment='"comment_count":"(.*?)"'#评论数
p_price='"view_price":"(.*?)"' #销售价格
p_nid='"nid":"(.*?)"' #商品唯一ID
p_img='"pic_url":"(.*?)"' #图片URL
12345678
(ps.聪明的小伙伴应该已经发现了,其实商品信息是被保存在了g_page_config变量里面,所以我们也可以先提取这个变量(一个字典),然后再读取数据,也可!)
完事具备,只欠东风。于是,东风来了:
# 数据爬取
key=input('请输入关键字:') # 商品的关键词
N=20 # 爬取的页数
data=[]
cookies=Login()
for i in range(N):
try:
page=i*44
url=list_url%{'key':key,'page':page}
res=requests.get(url,headers=headers,cookies=cookies)
html=res.text
title=re.findall(p_title,html)
location=re.findall(p_location,html)
sale=re.findall(p_sale,html)
comment=re.findall(p_comment,html)
price=re.findall(p_price,html)
nid=re.findall(p_nid,html)
img=re.findall(p_img,html)
for j in range(len(title)):
data.append([title[j],location[j],sale[j],comment[j],price[j],nid[j],img[j]])
print('-------Page%s complete!--------\n\n'%(i+1))
time.sleep(3)
except:
pass
data=pd.DataFrame(data,columns=['title','location','sale','comment','price','nid','img'])
data.to_csv('%s.csv'%key,encoding='utf-8',index=False)
上面代码爬取20也商品信息,并将其保存在本地的csv文件中,效果是这样的:
有了数据,放着岂不是浪费,我可是社会主义好青年,怎能做这种事? 那么,就让我们来简单看看这些数据叭:
(当然,数据量小,仅供娱乐参考)
# 导入相关库
import jieba
import operator
import pandas as pd
from wordcloud import WordCloud
from matplotlib import pyplot as plt
相应库的安装方法(其实基本都能通过pip解决):
# matplotlib中文显示
plt.rcParams['font.family']=['sans-serif']
plt.rcParams['font.sans-serif']=['SimHei']
不设置可能出现中文乱码等闹心的情况哦~
# 读取数据
key='显卡'
data=pd.read_csv('%s.csv'%key,encoding='utf-8',engine='python')
# 价格分布
plt.figure(figsize=(16,9))
plt.hist(data['price'],bins=20,alpha=0.6)
plt.title('价格频率分布直方图')
plt.xlabel('价格')
plt.ylabel('频数')
plt.savefig('价格分布.png')
价格频率分布直方图:
# 销售地分布
group_data=list(data.groupby('location'))
loc_num={}
for i in range(len(group_data)):
loc_num[group_data[i][0]]=len(group_data[i][1])
plt.figure(figsize=(19,9))
plt.title('销售地')
plt.scatter(list(loc_num.keys())[:20],list(loc_num.values())[:20],color='r')
plt.plot(list(loc_num.keys())[:20],list(loc_num.values())[:20])
plt.savefig('销售地.png')
sorted_loc_num=sorted(loc_num.items(), key=operator.itemgetter(1),reverse=True)#排序
loc_num_10=sorted_loc_num[:10] #取前10
loc_10=[]
num_10=[]
for i in range(10):
loc_10.append(loc_num_10[i][0])
num_10.append(loc_num_10[i][1])
plt.figure(figsize=(16,9))
plt.title('销售地TOP10')
plt.bar(loc_10,num_10,facecolor='lightskyblue',edgecolor='white')
plt.savefig('销售地TOP10.png')
销售地分布:
销售地TOP10:
# 制作词云
content=''
for i in range(len(data)):
content +=data['title'][i]
wl=jieba.cut(content,cut_all=True)
wl_space_split=' '.join(wl)
wc=WordCloud('simhei.ttf',
background_color='white', # 背景颜色
width=1000,
height=600,).generate(wl_space_split)
wc.to_file('%s.png'%key)
淘宝商品”显卡“的词云:
最后,要说点啥呢~
. LYST.COM
https://www.lyst.com/
这个网站其实就是一个网购搜索引擎,通过爬虫技术,搜罗了全球各大电商购物平台的各种商品信息。你可以通过这个搜索引擎去找想要的潮流单品,不管是什么东西,它都能通过强大的筛选功能细致地给你罗列出来,包括颜色、尺码、款式分类、是否打折等。而且会对比各个平台,帮你比价,以最实惠的价格买到最棒的商品。
所以购物前用这个网站搜一下就对了,基本上不会有买贵了的情况。
当然有些例外的情况,比如有些品牌的货品卖不出去,像日韩品牌CDG、三宅一生复线Homme Plisse、ADER等这些品牌就会私下给一些渠道商或者代购以7-8折的优惠去散货。所以可能有时候在平台上去比价购买,也许还没有你在淘宝代购那里买的便宜。因为这些品牌在本国和国际市场的定价是不同的,这是由于国际贸易中不同国家的进口税导致的。所以如果想真正的捡到便宜,自己还是平时要做足功课,了解你喜欢的品牌在本国和外国的售价。
2. MagazineLib
https://magazinelib.com/
非常全的外刊搜索网站,并且提供免费的PDF下载。有着强大的筛选功能,分类细致,每一期都会罗列出来,基本上你可以挑到所有你喜欢的杂志。
3. 123apps
https://123apps.com/cn/
这是一个提供在线音乐剪辑、视频剪辑、音视频格式转换、合成音轨等功能。完全免费,使用方便,精简小巧,可直接在浏览器上运行并完成操作。
我体验了一下里面的视频剪辑功能,操作很简单,视频导入非常快,导出时可以选择画质。还可以裁剪视频的所需区域,或更改边框比例。目前最大支持上传500M视频文件。
4. 在线词云生成工具-微词云
https://www.weiciyun.com/
这个网站提供了一款非常简单实用的微词云生成工具。只需简单几步,选择合适的背景图,编辑需要的词汇,它就能自动帮你生成炫酷的词云,让人眼前一亮。
除此之外,它还有强大的设计功能,每个字的字体、颜色、大小、分布等都可以进行设置。这比使用PS设计词云Logo封面简单太多。
5. 米范-酷导航
https://www.mifar.net/
这是一个专门为新媒体和电商从业者设计的导航网站,目前导航共有 运营营销、电子商务、数据信息、图像影音、前端设计、网站建设和实用工具七个大分类,收录了100+新媒体人必备工具,公众号排版、无版权图库、裂变增长、社群运营、数据分析、创意H5、流量采买等等。
如果你被排版编辑、编辑制作、数据收集和网站建设所困扰,翻翻米范或许可以获得一丝灵感。
6. 秘搭写作猫
https://xiezuocat.com/
秘塔写作猫是一个不可多得的 AI 智能写作工具,它专注于中文写作,功能非常强大,每个功能都可以帮助你更好的进行中文写作。
首先,它支持实时错误提示,你可以直接在网站里面进行写作,网站会实时提示你的错误,包括:字词错误、标点误用、语序错误、语法问题、同义混淆,并且给出具体的修改建议。
它的高级提示功能还包括:专有名词大小写检查、词语一致性检查、成语搭配、量词搭配、形近字、语法分析、情感分析、语序分析等。
它支持全文改写功能,这个功能可以帮助你一键修改文章的错误,让你的文章瞬间变得高级自然,并且用下划线展示了具体修改的地方。
最后,网站并不是完全免费的,提供免费版、基础版、高级版,免费版的功能和高级版其实差不多,免费版也足够满足日常使用需求,但是越高版本的单日处理字数、单篇处理字数、翻译字数也会越高。
7. 熊猫搜书
https://ebook.huzerui.com/
熊猫搜书是一个非常好用的电子书导航网站,一个网站相当于很多个网站。
它聚合了多达 20 多个高质量电子书网站,并且每个网站的质量都是非常高,它的界面简洁清新,你可以直接点击左侧切换网站。
8. PPT超级市场
http://ppt.sotary.com/web/wxapp/index.html
PPT 超级市场是一个完全免费的 PPT 模板下载网站。里面每一个 PPT 模板的质量都是极高,并且非常精美。
它的界面非常简洁,没有任何多余的东西,只有一个简单的搜索框和部分推荐模板,你可以直接利用网站的搜索功能搜索你需要的 PPT 模板。
搜索完毕,你就可以点击下载按钮直接下载 PPT 模板。
9.全历史
https://www.allhistory.com/
这个网站把每个国家的历史用时间轴的形式串了起来。点击一下朝代,就可以看到这个朝代的大事件和代表人物。
除此之外,里面的AI关系图谱功能提供了世界上各种人物、历史、文化、商业、科学等关系树状图。
时间地图功能还可以让你选择穿越回任意时代的疆域版图,根据不同年份详细标注了不一样的人物和事件。
F L O T ?
END
最后一个,忘记说了
封面的Pornhub体LOGO生成网站
由V2EX论坛KasuganoSoras制作
Pornhub
https://www.zerobbs.net/pornhub/
YouTube
https://www.zerobbs.net/youtube/
如对本稿件有异议或投诉,请联系flot_official@163.com
用Selenium来模拟浏览器操作,抓取淘宝商品信息,并将结果保存到MongoDB。
1.准备工作
本文以Chrome为例来讲解Selenium的用法。在开始之前,请确保已经正确安装好了Chrome浏览器并配置好了ChromeDriver;另外,还需要正确安装Python的Selenium库。
2.接口分析
首先,我们来打开淘宝的接口,观察一下它的ajax请求。
打开淘宝页面,搜索商品,比如ipad,此时打开开发者工具,查看Ajax请求,我们可以发现,根本没有Ajax请求,如图
不过没有关系,我们可以直接用Selenium来模拟浏览器,只要在浏览器里能看到的,都可以爬取。这也是我们选择使用Selenium的原因。
3.页面分析
我们的目标是爬取商品信息。如图是一个商品条目,其中包含商品的基本信息,包括商品图片、名称、价格、购买人数、店铺名称和店铺所在地,我们要做的就是将这些信息都抓取下来。
抓取入口就是淘宝的搜索页面,这个链接可以通过直接构造参数访问。例如,如果搜ipad,就可以直接访问https://s.taobao.com/search?q=ipad,呈现的就是第一页的搜索结果,如图所示
在页面下方,有一个分页导航,其中既包括前5页的链接,也包括下一个的链接,同时还有一个输入任意页码跳转的链接,如图
这里商品搜索的结果一般最大都是100页,要获取每一页的内容,只需要将页码从1到100顺序遍历即可,页码数是确定的。所以,直接在页面跳转文本框中输入要跳转的页码,然后点击“确定”按钮即可跳转到页码对应的页面。
这里不直接点击“下一页”的原因是:一旦爬取过程中出现异常退出,比如到50页退出了,此时点击“下一页”时,就无法快速切换到对应的后续页面了。此外,在爬取过程中,也需要记录当前的页码数,而且点击“下一页”之后页面加载失败,还需要做异常检测,检测当前页面是加载到了第几页。整个流程比较复杂,所以我们这里直接用跳转的方式来爬取页面。
当我们成功的加载出某一页商品列表时,利用Selenium即可获取页面源代码,然后再用相应的解析库解析即可。这里我们选用pyquery解析。下面我们用代码实现整个抓取过程。
4.获取商品列表
首先,需要构造一个抓取的URL:https://s.taobao.com/search?q=ipad。这个URL非常简洁,参数q就是要搜索的关键字。只要改变这个参数,即可获取不同的商品列表。这里我们将商品的关键字定义成一个变量,然后构造出这样的一个URL。
然后就需要用Selenium进行抓取了。我们实现了如下抓取列表页的方法:
from selenium import webdriver
from selenium.common.exceptions import TimeoutException
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWait
from urllib.parse import quote
import time
browser=webdriver.Chrome()
wait=WebDriverWait(browser,10)
KEYWORD='ipad'
def index_page(page):
"""
抓取索引页
:param page: 页码
"""
print('正在爬取第',page,'页')
try:
url='https://s.taobao.com/search?q='+quote(KEYWORD)
browser.get(url)
if page>1:
input=wait.until(EC.presence_of_element_located((By.CSS_SELECTOR,'#mainsrp-pager div.form > input')))
submit=wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR,'#mainsrp-pager div.form > span.btn.J_Submit')))
input.clear()
input.send_keys(page)
submit.click()
wait.until(EC.text_to_be_present_in_element((By.CSS_SELECTOR,'#mainsrp-pager li.item.active > span'),str(page)))
wait.until(EC.presence_of_element_located((By.CSS_SELECTOR,'.m-itemlist .items .item')))
get_products()
except TimeoutException:
index_page(page)
这里首先构造了一个WebDriver对象,使用的浏览器是Chrome,然后指定一个关键词,如ipad,接着定义了index_age()方法,用于抓取商品列表页。
在该方法里,我们首先访问了搜索商品的链接,然后判断了当前的页码,如果大于1,就进行跳页操作,否则等待页面加载完成。
等待加载时,我们使用了WebDriverWait对象,它可以指定等待条件,同时指定一个最长等待时间,这里指定为10s。如果在这个时间内成功匹配了等待条件,也就是说页面元素成功加载出来了,就立即返回相应结果并继续向下执行,否则到了最大等待时间还没有加载出来时,就直接抛出超时异常。
比如,我们最终要等待商品信息加载出来,就指定了presnece_of_element_located这个条件,然后传入了.m-itemlist .items .item这个选择器,而这个选择器对应的页面内容就是每个商品的信息块,可以在网页中查看。如果加载成功,就会执行后续的get_products()方法,提取商品信息。
关于翻页操作,这里首先获取页码输入框,赋值为input,然后获取“确定”按钮,赋值为submit,分别是图中的两个元素。
首先,我们清空了输入框,此时调用clear()方法即可。随后,调用send_keys()方法将页码填充到输入框中,然后点击“确定按钮即可”
那么,怎么样知道有没有跳转到对应的页码呢?我们可以注意到,成功跳转到某一页后,页码都会高亮显示,如图
我们只需要判断当前高亮的页码数是当前的页码数即可,所以这里使用了另一个等待条件text_to_be_present_in_element,它会等待指定的文本出现在某一个节点里面时即返回成功。这里我们将高亮的页码节点对应的CSS选择器和当前要跳转的页码通过参数传递给这个等待条件,这样它就会检测当前高亮的页码节点是不是我们传过来的页码数,如果是,就证明页面成功跳转到了这一页,页面跳转成功。
这样刚才实现的index_page()方法就可以传入对应的页码,待加载出对应页码的商品列表后,再去调用get_products()方法进行页面解析。
5.解析商品列表
接下来,我们就可以实现get_products()方法来解析商品列表了。这里我们直接获取页面源代码,然后用pyquery进行解析,实现如下:
from pyquery import PyQuery as pq
def get_products():
"""
提取商品数据
"""
html=browser.page_source
doc=pq(html)
items=doc('#mainsrp-itemlist .items .item').items()
for item in items:
product={
'image':item.find('.pic .img').attr('data-src'),
'price':item.find('.price').text(),
'deal':item.find('.deal-cnt').text(),
'title':item.find('.title').text(),
'shop':item.find('.shop').text(),
'location':item.find('.location').text()
}
print(product)
save_to_mongo(product)
首先,调用page_source属性获取页码的源代码,然后构造了PyQuery对象,提取了商品列表,此时使用的CSS选择器是#mainsrp-itemlist .items .item,它会匹配整个页面的每个商品。它的匹配结果是多个,所以这里我们又对它进行了一次遍历,用for循环将每个结果分别进行解析,每次循环把它赋值为item变量,每个item变量都是一个PyQuery对象,然后再调用它的find()方法,传入CSS选择器,就可以获取单个商品的特定内容。
比如查看一下商品源码
可以发现,它是一个img节点,包含id、class、data-src、alt和src属性,这里之所以可以看到这样图片,是因为它的src属性被赋值为图片的URL。把它的src属性提取出来,就可以获取商品的完整图片了。不过我们还注意data-src属性,它的图片内容也是图片的URL,观察后发现此URL是图片的完整大图,而src是压缩后的小图,所以这里抓取data-src属性来作为商品的图片。
因此,我们需要先利用find()方法找到图片的这个节点,然后再调用attr()方法获取商品的data-src属性,这样就成功提取了商品的链接。然后用同样的方法提取商品的价格、成交量、名称、店铺所在地等信息,接着将所有提取结果赋值为一个字典product,然后调用save_mongo()将其保存到MongoDB即可。
6.保存到MongoDB
接下来,我们将商品信息保存到MongoDB,代码如下:
import pymongo
MONGO_URL='localhost'
MONGO_DB='taobao'
MONGO_COLLECTION='products'
client=pymongo.MongoClient(MONGO_URL)
db=client[MONGO_DB]
def save_to_mongo(result):
"""
保存结果到MongoDB
"""
try:
if db[MONGO_COLLECTION].insert(result):
print('存储到MongoDB成功')
except Exception:
print('存储到MongoDB失败')
这里首先创建了一个MongoDB的连接对象,然后指定了数据库,随后指定了Collection的名称,接着调用insert()方法将数据库插入到MongoDB。此处的result的变量就是在get_products()方法里传来的product,包含单个商品的信息。
7.遍历每页
刚才我们所定义的get_index()方法需要接收参数page,page代码页码。这里我们实现页码遍历即可,代码如下:
MAX_PAGE=10
def main():
"""
遍历
:return:
"""
for i in range(1,MAX_PAGE+1):
index_page(i)
time.sleep(10)
main()
最后调用main()方法即可运行。
8.异常处理(绕过登录反爬机制)
当写到这里,如果运行程序会发现,程序在弹出浏览器窗口后,会出现登陆页面,但是当你尝试输入账户密码时,滑块的验证始终失效。并且页面还会不断刷新。如图
针对这种情况,博主找到了两种解决方案
方法一:修改ChromeDriver.exe
之所以出现这种情况,是因为在淘宝的登录页面,有这样一个js,它会判断你是通过驱动打开的浏览器还是其他情况,如果是驱动打开那么这个判断为真就会出现这种情况,如图,为判断的js
我们在控制台运行一下这个脚本window.navigator.webdriver
可以看到,判断为真,说明浏览器知道我们使用的是驱动。
那该如何解决呢?
首先,使用nodepad++或者记事本打开chrome,查找$cdc,找到这串代码后,将其用等长的字符串替代即可,例如把最后的l改成a。
然后把部分代码改为如下模式,将浏览器设置为开发者模式:
option=webdriver.ChromeOptions()
#开发者模式的开关,设置一下,打开浏览器就不会识别为自动化测试工具了
option.add_experimental_option('excludeSwitches', ['enable-automation'])
driver=webdriver.Chrome(chrome_options=option)
如果这种方法不能奏效,请看第二种方法
方法二:将用户信息的配置文件在代码中加载
首先,在Chrome中输入chrome://version/查看信息。如图,这是我们用户信息。
然后在代码中,加载浏览器配置
chrome_option=webdriver.ChromeOptions()
p=r'C:\Users\赵磊\AppData\Local\Google\Chrome\User Data'
#chrome_option.add_experimental_option('excludeSwitches', ['enable-automation']) # 以开发者模式
chrome_option.add_argument('--user-data-dir='+p)
browser=webdriver.Chrome(options=chrome_option)
wait=WebDriverWait(browser,10)
这样在爬取时就不会出现登录页面了。
9.运行
此时运行代码,会发现弹出一个Chrome浏览器,然后会访问淘宝页面,接着控制台输出如下
可以发现,这些商品信息的结果都是字典形式,它们倍存储到MongoDB里面,再看一下MongoDB中的结果
说明信息保存到MongoDB中,爬取成功。
selenium有多种编程语言的客户端驱动,编写自动化脚本语法简洁,其中python的selenium库便非常的受欢迎。
你可以使用selenium做web测试或者爬虫,自动抢票、自动下单也可以用selenium来做。
演示自动打开淘宝网:
# 导入库
from selenium import webdriver
import datetime
import time
# 记录时间
now=datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S.%f')
# 打开chrome
browser=webdriver.Chrome()
# 登录
def login():
# 打开淘宝首页,通过扫码登录
browser.get("https://www.taobao.com/")
time.sleep(3)
# 打开登录界面
find_login=browser.find_element_by_link_text("亲,请登录")
if find_login:
find_login.click()
print("请扫码登录")
time.sleep(10)
login()
# 选择购物车列表
def picking(method):
# 是否全选购物车
if method==0:
while True:
try:
if browser.find_element_by_id("J_SelectAll1"):
browser.find_element_by_id("J_SelectAll1").click()
print('全选购物车成功')
break
except:
print(f"找不到购买按钮")
else:
print(f"请手动勾选需要购买的商品")
time.sleep(1)
# 点击结算按钮
def settlement():
while True:
try:
if browser.find_element_by_id('J_SelectedItemsCount').text >='1':
browser.find_element_by_link_text("结 算").click()
print(f"结算成功,准备提交订单")
break
except:
pass
# 点击提交订单按钮
def submitting():
while True:
try:
if browser.find_element_by_link_text('提交订单'):
browser.find_element_by_link_text('提交订单').click()
print(f"抢购成功,请尽快付款")
break
except:
print(f"再次尝试提交订单")
def run(times):
# 打开购物车列表页面
print('正在抢购!')
browser.get("https://cart.taobao.com/cart.htm")
time.sleep(3)
while True:
now=datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S.%f')
# 对比时间,时间到的话就点击结算
if now > times:
# 全选购物车
picking(0)
# 点击结算按钮
settlement()
# 提交订单
submitting()
print(now)
break
希望本文对你有所帮助~~如果对软件测试、接口测试、自动化测试、性能测试、面试经验交流感兴趣可以私聊我或关注公众号“特斯汀软件测试”。免费领取最新软件测试大厂面试资料和Python自动化、接口、框架搭建学习资料!技术大牛解惑答疑,同行一起交流。
*请认真填写需求信息,我们会在24小时内与您取得联系。