· 6 years ago · Dec 18, 2019, 02:18 PM
1from config import details
2from selenium import webdriver
3import requests
4import time
5from time import sleep
6from selenium.webdriver.common.keys import Keys
7from selenium.webdriver.support.ui import Select
8from selenium.webdriver.common.by import By
9def captcha():
10 API_KEY = "6708f91e3705d0f873753e219b25ee7e" # Your 2captcha API KEY
11 site_key = "6LeWwRkUAAAAAOBsau7KpuC9AV-6J8mhw4AjC3Xz" # site-key, read the 2captcha docs on how to get this
12 url = "https://www.supremenewyork.com/checkout" # example url
13
14
15 s = requests.Session()
16
17 # here we post site key to 2captcha to get captcha ID (and we parse it here too)
18 captcha_id = s.post("http://2captcha.com/in.php?key={}&method=userrecaptcha&googlekey={}&pageurl={}".format(
19 API_KEY, site_key, url)).text.split("|")[1]
20 # then we parse gresponse from 2captcha response
21 recaptcha_answer = s.get(
22 "http://2captcha.com/res.php?key={}&action=get&id={}".format(API_KEY, captcha_id)).text
23 print("solving ref captcha...")
24 while "CAPCHA_NOT_READY" in recaptcha_answer:
25 sleep(5)
26 recaptcha_answer = s.get(
27 "http://2captcha.com/res.php?key={}&action=get&id={}".format(API_KEY, captcha_id)).text
28 recaptcha_answer = recaptcha_answer.split("|")[1]
29
30 # we make the payload for the post data here, use something like mitmproxy or fiddler to see what is needed
31 payload = {
32 "key": "value",
33 # This is the response from 2captcha, which is needed for the post request to go through.
34 "gresponse": recaptcha_answer
35 }
36
37 # then send the post request to the url
38 response = s.post(url, payload)
39 print(recaptcha_answer)
40 print(response)
41 print(payload)
42 #return(recaptcha_answer)
43 return(response)
44
45# And that"s all there is to it other than scraping data from the website, which is dynamic for every website.
46captcha()
47
48def order(k):
49
50 driver.get(k["product_url"])
51 driver.find_element_by_xpath("//*[@id=\"add-remove-buttons\"]/input").click()
52 time.sleep(0.5)
53 driver.find_element_by_xpath("//*[@id=\"cart\"]/a[2]").click()
54 driver.find_element_by_xpath("//*[@id=\"order_billing_name\"]").send_keys(k["name"])
55 driver.find_element_by_xpath("//*[@id=\"order_email\"]").send_keys(k["email"])
56 driver.find_element_by_xpath("//*[@id=\"order_tel\"]").send_keys(k["telephone"])
57 driver.find_element_by_xpath("//*[@id=\"bo\"]").send_keys(k["address_line_1"])
58 driver.find_element_by_xpath("//*[@id=\"oba3\"]").send_keys(k["address_line_2"])
59 driver.find_element_by_xpath("//*[@id=\"order_billing_address_3\"]").send_keys(k["address_line_3"])
60 driver.find_element_by_xpath("//*[@id=\"order_billing_city\"]").send_keys(k["city"])
61 driver.find_element_by_xpath("//*[@id=\"order_billing_zip\"]").send_keys(k["postcode"])
62 drp1=Select(driver.find_element_by_xpath("//*[@id=\"order_billing_country\"]"))
63 drp1.select_by_visible_text(k["country"])
64 drp2=Select(driver.find_element_by_xpath("//*[@id=\"credit_card_type\"]"))
65 drp2.select_by_visible_text(k["card_type"])
66 driver.find_element_by_xpath("//*[@id=\"cnb\"]").send_keys(k["card_number"])
67 drp3=Select(driver.find_element_by_xpath("//*[@id=\"credit_card_month\"]"))
68 drp3.select_by_visible_text(k["card_month"])
69 drp4=Select(driver.find_element_by_xpath("//*[@id=\"credit_card_year\"]"))
70 drp4.select_by_visible_text(k["card_year"])
71 driver.find_element_by_xpath("//*[@id=\"vval\"]").send_keys(k["cvv"])
72 driver.find_element_by_xpath("//*[@id=\"cart-cc\"]/fieldset/p/label/div/ins").click()
73 driver.find_element_by_xpath("//*[@id=\"pay\"]/input").click()
74 #window.document.getElementById("g-recaptcha-response").innerHTML="{recaptcha_answer}"
75 #driver.find_elements(By.CLASS_NAME, 'g-recaptcha-response').send_keys(recaptcha_answer)
76 document.getElementById("g-recaptcha-response").value=(response)
77
78if __name__ == "__main__":
79 driver = webdriver.Chrome("chromedriver")
80 order(details)
81
82
83 #https://stackoverflow.com/questions/6521270/webdriver-check-if-an-element-exists
84 # For sizes etc, use that^^^