利用Selenium 登录京东,抢购19.9的荣耀手环3

一、首先,19.9元抢购是京东吸引顾客的,最后反正强盗也是上百块,坑爹

二、利用Selenium做抢购的话能看到物品,用post请求就需要解析页面,获取参数信息,再模拟登录,但是自己就不能实时了解物品详情吧,所以我选择了第一种,第二种也不难,F12可以知道需要哪些参数,直接解析就可以

三、说说验证码吧,个人觉得简单点做,要么手动看着网页输入,要么解析出验证码路径,请求并保存图片在本地,然后自动打开图片,再手动输入。难点做就是提取图片的像素点,进行排序,然后自动帮你输入验证码,只要最后目的能抢到东西的方法就是好方法

四、有图有真相

    

五、该上代码了

    

# coding=utf-8
"""
@author:SoS
@data:2018/4/3
@version:Python3.6
"""
import requests
from datetime import datetime
import time
from PIL import Image
from selenium import webdriver

class jd():
    def __init__(self):
        self.driver = webdriver.Firefox()

    def request_jd(self):
        user_name = input("请输入用户名\n")
        pwd = input("请输入密码\n")
        self.driver.maximize_window()
        self.driver.get("https://www.jd.com/")
        time.sleep(1)
        self.driver.find_element_by_class_name("link-login").click()
        time.sleep(1)
        self.driver.find_element_by_link_text("账户登录").click()
        self.jd_cookies = self.driver.get_cookies()
        self.driver.find_element_by_id("loginname").send_keys(user_name)
        self.driver.find_element_by_id("nloginpwd").send_keys(pwd)
        
        try:
            self.driver.find_element_by_css_selector(".btn-img.btn-entry").click()
            time.sleep(0.5)
        
            print("需要输入验证码")
            # 可能有验证码
            captcha = self.request_capture()
            print("验证码",captcha)
            time.sleep(0.5)
            self.driver.find_element_by_id("authcode").send_keys(captcha)
            time.sleep(0.5)
            self.driver.find_element_by_css_selector(".btn-img.btn-entry").click()
        except:
            print("验证码")
        
        self.driver.get("https://item.jd.com/4255683.html")
        time.sleep(1)
        self.driver.find_element_by_id("InitCartUrl")
        try:
            self.driver.find_element_by_id("btn-onkeybuy").click()
        except :
            # 没有货了,继续刷30次
            count = 0
            while count < 30:
                self.driver.get("https://item.jd.com/4255683.html")
                try:
                    # 抢购
                    self.driver.find_element_by_id("choose-btn-ko").click()
                except:
                    count+=1
                    

        self.driver.find_element_by_id("order-submit").click()
        time.time(1)
        print("over")

    # 获取验证码并把图片显示出来
    def request_capture(self):
        headers = {
            "Referer":"https://www.jd.com/",
            "User_Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.140 Safari/53"
        }
        try:
            capture_url = self.driver.find_element_by_css_selector("#JD_Verification1").get_attribute("src2")
            # capture_url = capture_url + "&yys="+str(int(time.time()))
            print(capture_url)
            session = requests.Session();
            # cookies = requests.utils.cookiejar_from_dict(self.cookies_to_dict(),cookiejar=None, overwrite=True)
            # session.cookies = cookies
            response = session.get("https:"+capture_url, headers=headers, allow_redirects=False)
            with open("captcha.jpg","wb") as f:
                print(type(response.content))
                f.write(response.content)
                f.close()
        
            im = Image.open("captcha.jpg")
            im.show()
            im.close()
            captcha = input("请输入验证码\n")
            return captcha
        except:
            print("无验证码")
            return input("请输入验证码\n")
           
    # Selenium cookies 转换成字典类型设置给 requests
    def cookies_to_dict(self):
        cookie =[item["name"] + ":" + item["value"] for item in self.jd_cookies]
        cookies = ';'.join(item for item in cookie) 
        cook_map = {}
        for item in cookie :
          str = item.split(':')
          cook_map[str[0]] = str[1]
        return cook_map

if __name__ == "__main__":
    jd = jd()
    jd.request_jd()

六、源码地址

       源码地址驱动地址,为什么选火狐,因为它没版本限制呀,谷歌的话浏览器版本和驱动版本一定得映射对。

       驱动配置:将下载好的驱动放在D:\Python36下,然后添加到系统Path中

猜你喜欢

转载自blog.csdn.net/tenderness4/article/details/79797337
今日推荐