Python Sneaker Bot无法在结帐时正确为卡充电,什么Bot安全功能可以阻止它?

时间:2018-08-15 12:21:40

标签: python web-scraping bots

大家早上好。因此,我决定测试我的编码技能,并构建自己一直想构建的东西:运动鞋机器人。对于不认识运动鞋机器人的人来说,这是一个自动将运动鞋放入购物车并结账的机器人。在大型运动鞋发布中,鞋子可以在一秒钟之内售罄,因此脚本比手动浏览网页要快得多。

无论如何,我选择用python做我的机器人,并且通过varius POST和GET请求,它几乎可以正常工作了。如果您想查看特定的网站,该机器人就可以访问www.jimmyjazz.com。我之所以选择它们,主要是因为它们的僵尸程序检测能力很差。

我遇到的问题是我的卡实际上没有被扣款,这我不理解。该漫游器运行完美,当我发送上一个发布请求时,输出是结帐页面的页面源,这很有意义,因为当我尝试购买时,由于我使用的是隐私卡,因此应重新路由到结帐页面支出上限为1美元(因此应该会被拒绝)。无论如何,我将在这里链接我的机器人:

import requests
import random
from bs4 import BeautifulSoup as bs
import threading


proxies = {

}


# session = requests.session()

def get_sizes_in_stock(session):
    endpoint = "http://www.jimmyjazz.com/womens/footwear/jordan-jordan-1- 
    high-prem/AH7389-007?color=Black"
    response = session.get(endpoint)

    soup = bs(response.text, "html.parser")

    div = soup.find("div", {"class":"box_wrapper"})

    all_sizes = div.find_all("a")
    sizesInStock = []
    for size in all_sizes:
        if "piunavailable" not in size["class"]:
            sizeID = size["id"]
            sizesInStock.append(sizeID.split("_")[1])
    print(sizesInStock)
    return sizesInStock


def add_to_cart(session):
    sizes = get_sizes_in_stock(session)
    chosenSize = random.choice(sizes)
    endpoint = "http://www.jimmyjazz.com/cart-request/cart/add/%s/1"% 
    (chosenSize)
    resp = session.get(endpoint)
    print(chosenSize)
    return '"success":1' in resp.text

def check_out(session):
    dict = {

    }
    url = "https://api.levelaccess.net/analytics/3.0/results"
    coPost = session.post(url, dict)
    endpoint0 =  "https://www.jimmyjazz.com/cart/checkout"
    resp = session.get(endpoint0)

    soup = bs(resp.text, "html.parser")
    inputs = soup.find_all("input", {"name":"form_build_id"})
    form_build_id = inputs[0]["value"]

   # print(form_build_id)

   endpoint1 = "https://www.jimmyjazz.com/cart/checkout"
   payload1 = {
        "billing_email": "",
        "billing_email_confirm": "",
        "billing_phone": "",
        "email_opt_in": "1",
        "shipping_first_name": "",
        "shipping_last_name": "",
        "shipping_country_html": "",
        "shipping_address1": "",
        "shipping_address2": "",
        "shipping_city": "",
        "shipping_state": "",
        "shipping_zip": "",
        "shipping_method": "0",
        "signature_required": "1",
        "billing_same_as_shipping": "1",
        "billing_first_name": "",
        "billing_last_name": "",
        "billing_country": "US",
        "billing_address1": "",
        "billing_address2": "",
        "billing_city": "",
        "billing_state": "",
        "billing_zip": "",
        "payment_type": "",
        "cc_type": "",
        "cc_number": "",
        "cc_exp_month": "",
        "cc_exp_year": "",
        "cc_cvv": "",
        "gc_num": "",
        "form_build_id": form_build_id,
        "form_id": "cart_checkout_form",
}
resp1 = session.post(endpoint1,data=payload1)
# print(resp1.text)

soup1 = bs(resp1.text, "html.parser")
inputs1 = soup1.find_all("input", {"name":"form_build_id"})
form_build_id1 = inputs1[0]["value"]



print(form_build_id)
print(form_build_id1)
endpoint2 = "https://www.jimmyjazz.com/cart/confirm"

payload2 = {
    "form_build_id": form_build_id1,
    "form_id": "cart_confirm_form"
}

resp3 = session.post(endpoint2, data=payload2)
print(resp3.text)



def main():
    session = requests.session()
    headers = {'User-Agent' : 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) 
         AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.101 
         Safari/537.36'}
    session.headers.update(headers)

    x = get_sizes_in_stock(session)
    if len(x) != 0:
        print("some sizes in stock")
    print("adding a size to cart")
    if add_to_cart(session):
        print("shoes added to cart")
    print("attempting to checkout")
    check_out(session)

如果您不能花时间查看所有代码和网站的某些要求,我完全不会怪您。但是我肯定会在安全方面缺少网站上的某些内容。我在结帐页面和确认页面上都找到了令牌。还有什么其他安全手段可以防止僵尸。我听说有些网站要求使用某些Cookie,但是我不确定如何在python中执行此操作。任何其他帮助将不胜感激。

此外,请随时复制此脚本,对其进行修复并将其用于个人用途。我只是觉得建立自己是一件很酷的事情。

编辑:我知道一定有人会说它不起作用,因为我没有发送信息。当我用我的实际信息运行字典时,我正在填写字典,我只是觉得我不应该在线上发布该字典...

0 个答案:

没有答案