python 拼多多_拼多多现重大BUG被“薅羊毛”,教你如何用Python简单褥羊毛
import?time
from?urllib.parse?import?parse_qs
import?requests
from?bs4?import?BeautifulSoup
from?selenium?import?webdriver
from?selenium.common.exceptions?import?*
from?selenium.webdriver.support.wait?import?WebDriverWait
#?額外抽取的授權(quán)模塊
from?utils?import?auth
class?QMM(object):
"""借助券媽媽平臺(tái)褥京東京豆"""
def?__init__(self,?sleep=3,?months=None,?days=None):
self.timeout,?self.months,?self.days?=?sleep,?None,?None
#?爬取規(guī)則
if?months:
month_interval?=?months.split('-')
start_month,?end_month?=?int(month_interval[0]),?int(month_interval[-1])
self.months?=?list(map(lambda?m:?'{}月'.format(m),?range(start_month,?end_month?+?1)))
if?days:
day_interval?=?days.split('-')
start_day,?end_day?=?int(day_interval[0]),?int(day_interval[-1])
self.days?=?list(map(lambda?d:?'{}日'.format(d),?range(start_day,?end_day?+?1)))
#?手機(jī)店鋪(用作提醒輸出,可復(fù)制鏈接到手機(jī)端領(lǐng)取)
self.m_shop?=?[]
#?統(tǒng)計(jì)京豆總數(shù)
self.jing_dou?=?0
def?_crawl_url(self):
"""?抓取京豆更新頁,?獲得店鋪京豆領(lǐng)取地址"""
#?日期更新頁
qmm_collect?=?'http://www.quanmama.com/zhidemai/2459063.html'
bs?=?BeautifulSoup(requests.get(qmm_collect).text,?'html.parser')
for?link?in?bs.tbody.find_all('a'):
text?=?link.text
if?self.months:
if?not?list(filter(lambda?m:?m?in?text,?self.months)):?continue
if?self.days:
if?not?list(filter(lambda?d:?d?in?text,?self.days)):?continue
qmm_detail?=?link.get('href')
#?店鋪領(lǐng)取頁
resp?=?requests.get(qmm_detail)
bs?=?BeautifulSoup(resp.text,?'html.parser')
for?body?in?bs.find_all('tbody'):
for?mall?in?body.find_all('a'):
url?=?self._parse_url(mall.get('href'))
if?'shop.m.jd.com'?in?url:
self.m_shop.append(url)
else:
yield?url
@staticmethod
def?_parse_url(url):
"""提取URL中的url參數(shù)"""
mall_url?=?parse_qs(url).get('url')
return?mall_url.pop()?if?mall_url?else?url
def?start(self):
"""?登錄京東,領(lǐng)取店鋪羊毛"""
malls?=?set(self._crawl_url())
print('共有?%d?個(gè)可褥羊毛PC端店鋪頁面'?%?len(malls))
m_malls?=?self.m_shop
print('共有?%d?個(gè)可褥羊毛手機(jī)端店鋪頁面'?%?len(m_malls))
for?m_mall?in?m_malls:
print(m_mall)
if?malls:
#?登陸京東(Chrome、PhantomJS?or?FireFox)
driver?=?webdriver.Chrome()??#?driver?=?webdriver.PhantomJS()
jd_login?=?'https://passport.jd.com/new/login.aspx'
driver.get(jd_login)
#?窗口最大化
driver.maximize_window()
#?QQ授權(quán)登錄
driver.find_element_by_xpath('//*[@id="kbCoagent"]/ul/li[1]/a').click()
auth.qq(driver)
time.sleep(self.timeout)
#?開始褥羊毛
for?i,?detail?in?enumerate(malls):
driver.get(detail)
print('%d.店鋪:?%s'?%?(i?+?1,?detail),?end='')
try:
#?查找"領(lǐng)取"按鈕
btn?=?WebDriverWait(driver,?self.timeout).until(
lambda?d:?d.find_element_by_css_selector("[class='J_drawGift?d-btn']"))
except?TimeoutException:
#?失敗大多數(shù)情況下是無羊毛可褥(券媽媽平臺(tái)只是簡(jiǎn)單匯總但不一定就有羊毛)
print('?領(lǐng)取失敗,?TimeoutException?')
else:
try:
#?輸出羊毛戰(zhàn)績(jī)
items?=?WebDriverWait(driver,?self.timeout).until(
lambda?d:?d.find_elements_by_css_selector("[class='d-item']"))
for?item?in?items:
item_type?=?item.find_element_by_css_selector("[class='d-type']").text
item_num?=?item.find_element_by_css_selector("[class='d-num']").text
if?item_type?==?'京豆':?self.jing_dou?+=?item_num
print('?{}{}?'.format(item_type,?item_num),?end='')
except:
#?此處異常不太重要,?忽略
pass
finally:
btn.click()
print('?領(lǐng)取成功')
#?以下附加功能可選
self._print_jing_dou()
self._un_subscribe(driver)
self._finance_sign(driver)
def?_print_jing_dou(self):
print('O(∩_∩)O哈哈~,?共褥到了{(lán)}個(gè)京豆,相當(dāng)于RMB{}元',?self.jing_dou,?self.jing_dou?/?100)
def?_un_subscribe(self,?driver):
"""批量取消店鋪關(guān)注"""
#?進(jìn)入關(guān)注店鋪
subscribe_shop?=?'https://t.jd.com/vender/followVenderList.action'
driver.get(subscribe_shop)
try:
#?批量操作
batch_btn?=?WebDriverWait(driver,?self.timeout).until(
lambda?d:?d.find_element_by_xpath('//*[@id="main"]/div/div[2]/div[1]/div[2]/div[2]/div/a'))
batch_btn.click()
#?全選店鋪
all_btn?=?WebDriverWait(driver,?self.timeout).until(
lambda?d:?d.find_element_by_xpath('//*[@id="main"]/div/div[2]/div[1]/div[2]/div[2]/div/div/span[1]'))
all_btn.click()
#?取消關(guān)注
cancel_btn?=?WebDriverWait(driver,?self.timeout).until(
lambda?d:?d.find_element_by_xpath('//*[@id="main"]/div/div[2]/div[1]/div[2]/div[2]/div/div/span[2]'))
cancel_btn.click()
#?彈框確認(rèn)
confirm_btn?=?WebDriverWait(driver,?self.timeout).until(
lambda?d:?d.find_element_by_xpath("/html/body/div[7]/div[3]/a[1]"))
except?TimeoutException:
print('?批量取關(guān)店鋪失敗,?TimeoutException?')
else:
confirm_btn.click()
print('?已批量取消關(guān)注店鋪')
def?_finance_sign(self,?driver):
"""京東金融簽到領(lǐng)鋼镚"""
#?進(jìn)入京東金融
jr_login?=?'https://jr.jd.com/'
driver.get(jr_login)
try:
#?點(diǎn)擊簽到按鈕
sign_btn?=?WebDriverWait(driver,?self.timeout).until(
lambda?d:?d.find_element_by_xpath('//*[@id="primeWrap"]/div[1]/div[3]/div[1]/a'))
except?TimeoutException:
print('?京東金融簽到失敗,?TimeoutException?')
else:
sign_btn.click()
print('?京東金融簽到成功')
if?__name__?==?'__main__':
qmm?=?QMM(sleep=3,?months='7-8',?days='16-31')
qmm.start()
總結(jié)
以上是生活随笔為你收集整理的python 拼多多_拼多多现重大BUG被“薅羊毛”,教你如何用Python简单褥羊毛的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: NahimicSvc64.exe逻辑炸弹
- 下一篇: Unsafe 的简单使用