Skip to content

Commit e5ef009

Browse files
committed
add jd 'rush to purchase watch' example
1 parent 8987901 commit e5ef009

File tree

1 file changed

+106
-0
lines changed

1 file changed

+106
-0
lines changed

自动化/jd_watch.py

+106
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,106 @@
1+
# coding=utf-8
2+
"""
3+
@author:SoS
4+
@data:2018/4/3
5+
@version:Python3.6
6+
"""
7+
import requests
8+
from datetime import datetime
9+
import time
10+
from PIL import Image
11+
from selenium import webdriver
12+
13+
class jd():
14+
def __init__(self):
15+
self.driver = webdriver.Firefox()
16+
17+
def request_jd(self):
18+
user_name = input("请输入用户名\n")
19+
pwd = input("请输入密码\n")
20+
self.driver.maximize_window()
21+
self.driver.get("https://www.jd.com/")
22+
time.sleep(1)
23+
self.driver.find_element_by_class_name("link-login").click()
24+
time.sleep(1)
25+
self.driver.find_element_by_link_text("账户登录").click()
26+
self.jd_cookies = self.driver.get_cookies()
27+
self.driver.find_element_by_id("loginname").send_keys(user_name)
28+
self.driver.find_element_by_id("nloginpwd").send_keys(pwd)
29+
30+
try:
31+
self.driver.find_element_by_css_selector(".btn-img.btn-entry").click()
32+
time.sleep(0.5)
33+
34+
print("需要输入验证码")
35+
# 可能有验证码
36+
captcha = self.request_capture()
37+
print("验证码",captcha)
38+
time.sleep(0.5)
39+
self.driver.find_element_by_id("authcode").send_keys(captcha)
40+
time.sleep(0.5)
41+
self.driver.find_element_by_css_selector(".btn-img.btn-entry").click()
42+
except:
43+
print("验证码")
44+
45+
self.driver.get("https://item.jd.com/4255683.html")
46+
time.sleep(1)
47+
self.driver.find_element_by_id("InitCartUrl")
48+
try:
49+
self.driver.find_element_by_id("btn-onkeybuy").click()
50+
except :
51+
# 没有货了,继续刷30次
52+
count = 0
53+
while count < 30:
54+
self.driver.get("https://item.jd.com/4255683.html")
55+
try:
56+
# 抢购
57+
self.driver.find_element_by_id("choose-btn-ko").click()
58+
except:
59+
count+=1
60+
61+
62+
self.driver.find_element_by_id("order-submit").click()
63+
time.time(1)
64+
print("over")
65+
66+
# 获取验证码并把图片显示出来
67+
def request_capture(self):
68+
headers = {
69+
"Referer":"https://www.jd.com/",
70+
"User_Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.140 Safari/53"
71+
}
72+
try:
73+
capture_url = self.driver.find_element_by_css_selector("#JD_Verification1").get_attribute("src2")
74+
# capture_url = capture_url + "&yys="+str(int(time.time()))
75+
print(capture_url)
76+
session = requests.Session();
77+
# cookies = requests.utils.cookiejar_from_dict(self.cookies_to_dict(),cookiejar=None, overwrite=True)
78+
# session.cookies = cookies
79+
response = session.get("https:"+capture_url, headers=headers, allow_redirects=False)
80+
with open("captcha.jpg","wb") as f:
81+
print(type(response.content))
82+
f.write(response.content)
83+
f.close()
84+
85+
im = Image.open("captcha.jpg")
86+
im.show()
87+
im.close()
88+
captcha = input("请输入验证码\n")
89+
return captcha
90+
except:
91+
print("无验证码")
92+
return input("请输入验证码\n")
93+
94+
# Selenium cookies 转换成字典类型设置给 requests
95+
def cookies_to_dict(self):
96+
cookie =[item["name"] + ":" + item["value"] for item in self.jd_cookies]
97+
cookies = ';'.join(item for item in cookie)
98+
cook_map = {}
99+
for item in cookie :
100+
str = item.split(':')
101+
cook_map[str[0]] = str[1]
102+
return cook_map
103+
104+
if __name__ == "__main__":
105+
jd = jd()
106+
jd.request_jd()

0 commit comments

Comments
 (0)