Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- func startHeadless(cookie: String, task: Task, row: IndexPath, sessionManager: SessionManager) {
- guard let currentCell = self.tableView.cellForRow(at: row) as? TaskCell else {
- print("error at row: \(row.row)")
- return
- }
- currentCell.statusLabel?.text = "Getting Checkout..."
- self.clearCookiesBrowser()
- let config = WKWebViewConfiguration()
- //let headlessWebView = self.browserWebview
- //self.centerBrowserWebViewConstraint.constant = 0
- //self.browserWebview.isHidden = false
- let headlessWebView = WKWebView(frame: .zero, configuration: config)
- headlessWebView.isHidden = true
- var request = URLRequest(url: URL(string: "https://www.supremenewyork.com/checkout")!)
- request.setValue("Mozilla/5.0 (iPhone; CPU iPhone OS 10_3_1 like Mac OS X) AppleWebKit/603.1.30 (KHTML, like Gecko) Version/10.0 Mobile/14E304 Safari/602.1", forHTTPHeaderField: "user-agent")
- request.setValue("text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8", forHTTPHeaderField: "accept")
- request.setValue("gzip, deflate, br", forHTTPHeaderField: "accept-encoding")
- request.setValue("en-US,en;q=0.9", forHTTPHeaderField: "accept-language")
- let newCookies = cookie.replacingOccurrences(of: "request_method=POST;", with: "").replacingOccurrences(of: "HttpOnly", with: "").replacingOccurrences(of: "-0000,", with: "-0000;")
- request.setValue(newCookies, forHTTPHeaderField: "cookie")
- headlessWebView.load(request)
- headless.browsers.append(headlessWebView)
- let indexOfBrowser = (headless.browsers.firstIndex(of: headlessWebView))
- self.checkIfCheckoutHeadless(index: indexOfBrowser!, task: task, row: row, sessionManager: sessionManager)
- }
- func checkIfCheckoutHeadless(index: Int, task : Task, row : IndexPath, sessionManager: SessionManager) {
- let headlessWebView = headless.browsers[index]
- if(task.isStopped){
- self.clearCookiesBrowser()
- headlessWebView.load(URLRequest(url: URL(string: "about:blank")!))
- guard let currentCell = self.tableView.cellForRow(at: row) as? TaskCell else {
- print("error at row: \(row.row)")
- return
- }
- currentCell.statusLabel?.text = "Stopped"
- return
- }
- guard let currentCell = self.tableView.cellForRow(at: row) as? TaskCell else {
- print("error at row: \(row.row)")
- return
- }
- currentCell.statusLabel?.text = "Getting Checkout..."
- headlessWebView.evaluateJavaScript(
- """
- function getCheckout() {
- if(window.location.href == "https://www.supremenewyork.com/checkout") {
- return "true";
- } else {
- return window.location.href;
- }
- }
- getCheckout();
- """)
- { (res, error) in
- guard let res = res as? String else {
- print("no response! retrying??")
- DispatchQueue.main.asyncAfter(deadline: .now() + 1.0, execute: {
- self.checkIfCheckoutHeadless(index: index, task: task, row: row, sessionManager: sessionManager)
- })
- return
- }
- print(res)
- if res.range(of: "true") != nil {
- DispatchQueue.main.asyncAfter(deadline: .now() + 1.0, execute: {
- self.injectCaptchaHeadless(index: index, task: task, row: row, sessionManager: sessionManager)
- })
- } else {
- DispatchQueue.main.asyncAfter(deadline: .now() + 1.0, execute: {
- print("retrying")
- self.checkIfCheckoutHeadless(index: index, task: task, row: row, sessionManager: sessionManager)
- })
- }
- }
- }
- func injectCaptchaHeadless(index: Int, task : Task, row : IndexPath, sessionManager: SessionManager) {
- let headlessWebView = headless.browsers[index]
- if(task.isStopped){
- self.clearCookiesBrowser()
- headlessWebView.load(URLRequest(url: URL(string: "about:blank")!))
- guard let currentCell = self.tableView.cellForRow(at: row) as? TaskCell else {
- print("error at row: \(row.row)")
- return
- }
- currentCell.statusLabel?.text = "Stopped"
- return
- }
- guard let currentCell = self.tableView.cellForRow(at: row) as? TaskCell else {
- print("error at row: \(row.row)")
- return
- }
- currentCell.statusLabel?.text = "Checkout out..."
- headlessWebView.evaluateJavaScript(
- """
- function inject() {
- document.getElementById('checkout_form').getElementsByClassName('g-recaptcha')[0].remove()
- var x = document.createElement("input")
- x.setAttribute("type", "text");
- x.setAttribute("id","g-recaptcha-response");
- x.setAttribute("name", "g-recaptcha-response")
- x.setAttribute("value", "\(task.captchaToken!)")
- document.getElementById('checkout_form').appendChild(x)
- return;
- }
- inject();
- """
- ) { (response, error) in
- var currentProfile : Profile!
- for profile in self.profilesArray {
- if profile.profileName?.lowercased() == task.profileName?.lowercased() {
- currentProfile = profile
- break
- }
- }
- if(currentProfile.country!.uppercased() == "CANADA" || currentProfile.country!.uppercased() == "USA") {
- self.checkItem(index: index, task: task, row: row, sessionManager: sessionManager)
- return
- } else {
- self.checkoutHeadlessEu(index: index, task: task, row: row, sessionManager: sessionManager)
- return
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement