私信小編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小時內與您取得聯系。