免責宣告:專案只供學習交流使用,請勿商用,商用違法,刷幣有封號危險!!!
大家盡量支持正版!!!!
作者:小成Charles
原創作品
轉載請標注原創文章地址:https://blog.csdn.net/weixin_42999453/article/details/111321299
一、引言
因為考研用到了不背單詞app,這個軟體做的還是很好的所以就入手了,但是缺點就是里面有一些擴展功能和單詞書需要花錢買,內購專案可以用酷幣抵用,然后就萌生刷酷幣的想法,app中分享的連接只要有一個新用戶點進去你就會獲得一定量的酷幣,因為用戶不涉及到賬號的登錄,所以思路就很簡單了,用python腳本實作模擬請求鏈接就可以啦,于是順著這個思路寫了下去,先來成功截圖
話不多說,先上成功截圖


二、 直接進行Request請求
代碼如下
url = 'https://learnywhere.cn/bb/activity/article/2020/0619/news' \
'?key=108039b518584c6cacafaafa7712bec4&feat=u47617382&sha' \
're_platform=wechat&show_user_info=1'
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/535.1 (K'
'HTML, like Gecko) Chrome/13.0.782.41 Safari/535.1 QQBrowser/6.9.11079.201',
}
response = requests.get(url, headers=headers)
print(response.text)
代碼設定了瀏覽器標簽,模擬瀏覽器訪問,運行結果大致如下:
d=app></div><script>!(function (a, b) {
if (!b.__SV) {
var c, d, e, f;
(window.dplus = b),
(b._i = []),
(b.init = function (a, c, d) {
function g(a, b) {
var c = b.split('.');
2 == c.length && ((a = a[c[0]]), (b = c[1])),
(a[b] = function () {
a.push([b].concat(Array.prototype.slice.call(arguments, 0)));
});
}.....
然后發現賬號的酷幣沒有任何變化,即使是新設備也毫無作用,然后分析了一下,這個實作的程序是先通過JavaScript渲染的程序,然后通過Ajax從服務器獲取資料并判斷當前設備是否為新設備,那么request請求是肯定不可用的,于是就想到用selenium來進行渲染獲取資料
三、利用selenium和ChormeDriver進行JavaScript渲染
首先安裝selenium和ChormeDriver,具體方法請網上查詢,不在贅述,
前期準備:
這里我們盡量準備大約一千個‘User-Agent’用來添加到headers,這里直接在網上找個在線生成器就可以(網上一大堆),然后我方便測驗就放在一個txt檔案如圖所示一大堆
然后此代碼塊實作讀取并存到陣列中,并隨機獲取一個agent:
def get_agen_list():
with open("D:/0DESK/UserAgentList.txt", 'r') as file_to_read:
while True:
lines = file_to_read.readline()
if not lines:
break
pass
listAgent.append(lines)
pass
print(len(listAgent))
get_agen_list()
# 隨機獲取一個agent
USER_AGENT = listAgent[random.randint(0, 999)]
接下來就是實作渲染了,執行一下代碼就可以發現界面顯示你是新用戶,然后app中的酷幣也相應的增加了:
chrome_options = Options()
chrome_options.add_argument("--User-Agent="+USER_AGENT)
browser = webdriver.Chrome(chrome_options=chrome_options)
browser.get('https://learnywhere.cn/bb/activity/article/2020/0619/news?key=0926438a01e84a34bb1823447ddb007f&feat'
'=u47617382&share_platform=wechat&show_user_info=1')
其實到這里就基本可以了,但是經測驗,同一個IP請求次數過多就會出現你是老用戶,大多數網站都會這樣的,對付這樣的措施我們可以利用代理IP進行訪問,實作方法就是給option添加add_argument
四、添加代理IP訪問
–以下文章借鑒崔慶才的《Python3 網路爬蟲開發實戰》
代理IP就可以反IP檢測系統了,代理IP可以使用免費的也可以收費的,當然收費的質量很高,更加穩定一些,如下代碼實作代理添加的方式,如果你的代理IP是沒有賬號密碼的可以這樣:
from selenium import webdriver
proxy = '127.0.0.1:9743'
chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument('--proxy-server=http://' + proxy)
browser = webdriver.Chrome(chrome_options=chrome_options)
browser.get('http://httpbin.org/get')
在這里我們通過 ChromeOptions 來設定代理,在創建 Chrome 物件的時候通過 chrome_options 引數傳遞即可, 這樣在運行之后便會彈出一個 Chrome 瀏覽器,訪問目標鏈接之后輸出結果如下:
{
"args": {},
"headers": {
"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8",
"Accept-Encoding": "gzip, deflate",
"Accept-Language": "zh-CN,zh;q=0.8",
"Connection": "close",
"Host": "httpbin.org",
"Upgrade-Insecure-Requests": "1",
"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36"
},
"origin": "106.185.45.153",
"url": "http://httpbin.org/get"
}
可以看到 origin 同樣為代理 IP 的地址,代理設定成功, 如果代理是認證代理,則設定方法相對比較麻煩,方法如下:
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
import zipfile
ip = '127.0.0.1'
port = 9743
username = 'foo'
password = 'bar'
manifest_json = """
{
"version": "1.0.0",
"manifest_version": 2,
"name": "Chrome Proxy",
"permissions": [
"proxy",
"tabs",
"unlimitedStorage",
"storage",
"<all_urls>",
"webRequest",
"webRequestBlocking"
],
"background": {
"scripts": ["background.js"]
}
}
"""
background_js = """
var config = {
mode: "fixed_servers",
rules: {
singleProxy: {
scheme: "http",
host: "%(ip)s",
port: %(port)s
}
}
}
chrome.proxy.settings.set({value: config, scope: "regular"}, function() {});
function callbackFn(details) {
return {
authCredentials: {
username: "%(username)s",
password: "%(password)s"
}
}
}
chrome.webRequest.onAuthRequired.addListener(
callbackFn,
{urls: ["<all_urls>"]},
['blocking']
)
""" % {'ip': ip, 'port': port, 'username': username, 'password': password}
plugin_file = 'proxy_auth_plugin.zip'
with zipfile.ZipFile(plugin_file, 'w') as zp:
zp.writestr("manifest.json", manifest_json)
zp.writestr("background.js", background_js)
chrome_options = Options()
chrome_options.add_argument("--start-maximized")
chrome_options.add_extension(plugin_file)
browser = webdriver.Chrome(chrome_options=chrome_options)
browser.get('http://httpbin.org/get')
在這里需要在本地創建一個 manifest.json 組態檔和 background.js 腳本來設定認證代理,運行之后本地會生成一個 proxy_auth_plugin.zip 檔案保存配置, 運行結果和上例一致,origin 同樣為代理 IP,
五、擴展
如果出現以下截一圖就說明當前刷幣成功,因為你是新用戶

然后我們同過檢查NetWork下的XHR可以發現網頁請求的程序,在report…那一列中我們點擊Preview可以發現newDevice的數量為1,說明當前系統判斷為新設備,就是成功成功了,如果你想更完善程式的話,可以通過Ajax獲取此資料,來進行判斷當前請求是否成功

作者:小成Charles
原創作品
轉載請標注原創文章地址:https://blog.csdn.net/weixin_42999453/article/details/111321299
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/236599.html
標籤:python
