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

#?額外抽取的授權模塊

from?utils?import?auth

class?QMM(object):

"""借助券媽媽平臺褥京東京豆"""

def?__init__(self,?sleep=3,?months=None,?days=None):

self.timeout,?self.months,?self.days?=?sleep,?None,?None

#?爬取規則

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)))

#?手機店鋪(用作提醒輸出,可復制鏈接到手機端領取)

self.m_shop?=?[]

#?統計京豆總數

self.jing_dou?=?0

def?_crawl_url(self):

"""?抓取京豆更新頁,?獲得店鋪京豆領取地址"""

#?日期更新頁

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')

#?店鋪領取頁

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參數"""

mall_url?=?parse_qs(url).get('url')

return?mall_url.pop()?if?mall_url?else?url

def?start(self):

"""?登錄京東,領取店鋪羊毛"""

malls?=?set(self._crawl_url())

print('共有?%d?個可褥羊毛PC端店鋪頁面'?%?len(malls))

m_malls?=?self.m_shop

print('共有?%d?個可褥羊毛手機端店鋪頁面'?%?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授權登錄

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:

#?查找"領取"按鈕

btn?=?WebDriverWait(driver,?self.timeout).until(

lambda?d:?d.find_element_by_css_selector("[class='J_drawGift?d-btn']"))

except?TimeoutException:

#?失敗大多數情況下是無羊毛可褥(券媽媽平臺只是簡單匯總但不一定就有羊毛)

print('?領取失敗,?TimeoutException?')

else:

try:

#?輸出羊毛戰績

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('?領取成功')

#?以下附加功能可選

self._print_jing_dou()

self._un_subscribe(driver)

self._finance_sign(driver)

def?_print_jing_dou(self):

print('O(∩_∩)O哈哈~,?共褥到了{}個京豆,相當于RMB{}元',?self.jing_dou,?self.jing_dou?/?100)

def?_un_subscribe(self,?driver):

"""批量取消店鋪關注"""

#?進入關注店鋪

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()

#?取消關注

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()

#?彈框確認

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('?批量取關店鋪失敗,?TimeoutException?')

else:

confirm_btn.click()

print('?已批量取消關注店鋪')

def?_finance_sign(self,?driver):

"""京東金融簽到領鋼镚"""

#?進入京東金融

jr_login?=?'https://jr.jd.com/'

driver.get(jr_login)

try:

#?點擊簽到按鈕

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()

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/443602.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/443602.shtml
英文地址,請注明出處:http://en.pswp.cn/news/443602.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

上海交通大學python期末考試樣題加解析_上海交通大學python期末考試樣題加解析...

一、選擇題: 將唯一正確的選項寫在題前括號中.每題2分.【】(1) 本課程的目標定位是什么?[A] 學習Python語言[B] 學習計算機的工作原理[C] 學習各種算法[D] 學習用計算機解決問題【】(2) 下列哪個標識符是合法的?[A] var-name [B] !#$% [C] _100 [D] elif【】(3) 執行下列語句…

mysql 安裝測試ok_tpcc-mysql安裝測試與使用的實例教程

1:下載tpcc-mysql的壓縮包,從下面的網站進行下載也可直接從葉總博客直接下載:我這邊使用的就是后者。2:安裝tpcc-mysql[rootmxqmongodb2 tpccmysql]# gunzip tpcc-mysql-src.tgz[rootmxqmongodb2 tpccmysql]# tar xf tpcc-mysql-s…

python多線程寫同一文件_Python多線程寫文件實例

# -*- coding: utf-8 -*-import threading多線程生成日志工具__author ["yangfei" ]#該方法主要用于寫入300行WARN日志def writeWarnLog(file):count0;while count<300:try:file.write(2012-11-28 22:51:01|zookeeper|WARN|m1|172.17.1.15\n)count1except Except…

Tomcat6.0.37,tomcat6.0.37,下訪問Web項目,jsp項目不需要輸入項目名稱和端口號的配置方法...

1.不需要數據項目名稱就可以訪問項目的配置方法如下&#xff1a; 首先到你的Tomcat下的conf文件夾下找到server.xml文件&#xff0c;打開后修改為&#xff1a; <Host name"localhost" appBase"webapps"unpackWARs"true" autoDeploy"tru…

java合并list_java合并list方法代碼實例

這篇文章主要介紹了java合并list方法代碼實例,文中通過示例代碼介紹的非常詳細&#xff0c;對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下List包括List接口以及List接口的所有實現類。因為List接口實現了Collection接口&#xff0c;所以List接口擁有Collec…

java math 函數_Java中Math類常用函數總結

Java中比較常用的幾個數學公式的總結&#xff1a;//取整&#xff0c;返回小于目標函數的最大整數,如下將會返回-2Math.floor(-1.8)&#xff1b;//取整&#xff0c;返回發育目標數的最小整數Math.ceil()//四舍五入取整Math.round()//計算平方根Math.sqrt()//計算立方根Math.cbrt…

java asc碼_Java中ASC碼與字符互相轉化

package com.ljq.test;/*** Java中ASC碼與字符互相轉化** author jiqinlin**/public class ASCTest {private static int ascNum;private static char strChar;public static void main(String[] args) {System.out.println(getAsc("a"));System.out.println(backcha…

java上傳png_java上傳png圖片出現紅色背景

java圖片上傳出現紅色背景java圖片服務器上傳圖片都很正常&#xff0c;唯獨上傳png圖片時&#xff0c;png圖片變成紅色背景原因是讀取上傳數據時用的是ImageIO.read(inputstream)方法public static BufferedImage getImages(byte[] data) throws IOException {ByteArrayInputSt…

java 引用隊列_Java中管理資源的引用隊列相關原理解析

當對象改變其可達性狀態時&#xff0c;對該對象的引用就可能會被置于引用隊列(reference queue)中。這些隊列被垃圾回收器用來與我們的代碼溝通有關對象可達性變化的情況。這些隊列是探測可達性變化的最佳方式&#xff0c;盡管我們也可以通過檢查get方法的返回值是不是null來探…

Tomcat 替換項目圖標

1.首先制作一個32*32像素的圖標&#xff0c;命名為favicon.ico這里名稱必須是和Tomcat的webapps下的ROOT下的一樣。 2.把制作好的圖標放到你要部署的Web項目的images目錄下&#xff0c;如果你的Web項目有過濾器等&#xff0c;要給后綴名為.ico的圖標放行。 3.最后你就可以在你需…

hp 導出日志 遠程管理卡_惠普服務器遠程管理卡安裝詳解

可以遠程管理服務器。帶惠普基于Web的網絡資源管理和性能監視工具HP Toptools惠普遠程管理卡的主要功能是可以實現對服務器的遠程監控&#xff0c;其中包括察看日志、遠程診斷、遠程開/關機、重啟等等。基于惠普遠程管理卡的重要功能&#xff0c;本文將著重介紹惠普遠程管理卡的…

java 錯誤登陸次數_純java代碼實現登陸次數驗證,登陸錯誤5次之后鎖定30分鐘

本方法因為是根據思路純手寫&#xff0c;代碼可以再簡化&#xff0c;功能嘗試沒問題&#xff0c;最主要就是在登陸驗證中的邏輯&#xff0c;checkLogin()方法是登錄前的驗證&#xff0c;而真正的登陸方式采用的是Shiro&#xff0c;若不是采用Shiro登陸&#xff0c;將該邏輯采用…

java 監聽器 分類_java過濾器和監聽器詳解 分類: 學習專區

過濾器1、Filter工作原理(執行流程)當客戶端發出Web資源的請求時&#xff0c;Web服務器根據應用程序配置文件設置的過濾規則進行檢查&#xff0c;若客戶請求滿足過濾規則&#xff0c;則對客戶請求&#xff0f;響應進行攔截&#xff0c;對請求頭和請求數據進行檢查或改動&#x…

linux java啟動腳本文件_不錯的linux下通用的java程序啟動腳本

#!/bin/sh#該腳本為Linux下啟動java程序的通用腳本。即可以作為開機自啟動service腳本被調用&#xff0c;#也可以作為啟動java程序的獨立腳本來使用。##Author: tudaxia.com, Date: 2011/6/7##警告!!!&#xff1a;該腳本stop部分使用系統kill命令來強制終止指定的java程序進程。…

linux心跳包檢測代碼_OpenSSL心跳包越界讀敏感信息泄漏漏洞

發布日期&#xff1a;2014-04-10CVE ID&#xff1a;CVE-2014-0160受影響的軟件及系統&#xff1a;OpenSSL 1.0.1&#xff0d;OpenSSL 1.0.1fOpenSSL 1.0.2-betaOpenSSL 1.0.2-beta1未受影響的軟件及系統&#xff1a;OpenSSL 0.9.8OpenSSL 1.0.0OpenSSL 1.0.1gOpenSSL 1.0.2-bet…

mysql數據庫主要負責存儲_mysql數據庫自帶數據庫介紹

show databases&#xff1b;查看mysql自帶數據庫有information_schema&#xff0c;mysql&#xff0c; performance_schema&#xff0c; testinformation_schema數據庫有40張表&#xff0c;如下。在MySQL中&#xff0c;把 information_schema 看作是一個數據庫&#xff0c;確切說…

python 編輯數學公式_Jupyter快速編輯高大上數學公式 泰勒展開式

歡迎點擊「算法與編程之美」↑關注我們&#xff01;本文首發于微信公眾號&#xff1a;"算法與編程之美"&#xff0c;歡迎關注&#xff0c;及時了解更多此系列博客。人工智能的基礎是機器學習&#xff0c;而通過之前的幾篇博客了解到&#xff0c;機器學習的基礎是數學…

用java寫一個日歷_使用JAVA寫一個簡單的日歷

JAVA寫一個簡單的日歷import java.text.DateFormat;import java.text.ParseException;import java.text.SimpleDateFormat;import java.util.Calendar;import java.util.Date;import java.util.GregorianCalendar;import java.util.Scanner;/*** 制作一個簡單的日歷** author 這…

MySQL定時任務event,儲存過程(定時刪除指定時間前90天指定表的數據)

<span style"font-family: Microsoft YaHei; font-size: 14px;">MySQL定時任務event</span> 由于一些業務需求&#xff0c;我們可能需要定時清除數據庫一些廢棄的數據&#xff0c;可以使用mysql的存儲過程和事件來完成。 下面例子定時清除日志表tbl_base…

python慢為什么用的人還很多_為什么是所有人比python標準慢得多嗎?

通過使用生成器理解而不是列表理解&#xff0c;可以使這兩個函數更快、更具可比性。在s """import numpy as np;x, y np.random.rand(1000),np.random.rand(1000);(all((x[i], y[i])) for i in range(1000)) """timeit.timeit(s,number1000)0.…