From 0ec824d7ccec223c0d649352df71ba9e39477d74 Mon Sep 17 00:00:00 2001 From: PAN Lei Date: Sun, 20 Mar 2022 18:19:39 +0100 Subject: [PATCH] use playwright to simulate mobile browser --- commandor_page.py | 102 +++++++++++++++++++++++++++++++++++++++++++++ valid_profile.xlsx | Bin 18337 -> 18371 bytes 2 files changed, 102 insertions(+) create mode 100644 commandor_page.py diff --git a/commandor_page.py b/commandor_page.py new file mode 100644 index 0000000..b1c0a28 --- /dev/null +++ b/commandor_page.py @@ -0,0 +1,102 @@ +import subprocess +import time + +import playwright +from playwright.sync_api import sync_playwright + +from pojo.contact_pojo import ContactPojo + +# RDV_URL = "https://rendezvousparis.hermes.com/client/register" +RDV_URL = "file:///Users/lpan/Downloads/test_appointment.html" + + +# RDV_URL = "https://www.google.fr" + + +# RDV_URL = "https://api.ipify.org" + + +class CommandorPage: + def __init__(self): + pass + + def start_page(self, proxy, contact: ContactPojo): + # specifying an explicit component name + with sync_playwright() as pwright: + self.browser = pwright.chromium.launch(headless=False, timeout=30000, proxy=proxy) + self.page = self.browser.new_page( + user_agent="Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.87 Mobile Safari/537.36") + self.page.goto(RDV_URL) + content = self.page.content() + self.setPhoneCountry(self.page) + self.setPhoneNumber(contact.phone) + self.setName(contact.last_name, contact.first_name) + self.setEmail(contact.mail) + self.setIdNumber(contact.passport) + self.checkCgu() + self.clickOnValidBtn() + # page.on('load', self.on_page_loaded) + print(content) + time.sleep(100000) + + def on_page_loaded(self): + print("page loaded") + + def setPhoneCountry(self, page): + page.evaluate("""()=>document.getElementById("phone_country").value = \"FR\" """) + + def setPhoneNumber(self, phoneNumber): + self.page.evaluate("""(phoneNumber)=>document.getElementById("phone_number").value =phoneNumber""", phoneNumber) + + def setName(self, lastName, firstName): + self.page.evaluate("""(name)=> { + document.getElementById("surname").value = name.lastName; + document.getElementById("name").value = name.firstName}""", {'lastName': lastName, 'firstName': firstName}) + + def setEmail(self, email): + self.page.evaluate("""(email)=>document.getElementById("email").value = email""", email) + + def setIdNumber(self, id): + self.page.evaluate(""" (id) => document.getElementById("passport_id").value = id""", id) + + def checkCgu(self): + self.page.evaluate("""document.getElementById("cgu").checked = true; + document.getElementById("processing").checked = true""") + + def clickOnValidBtn(self): + self.page.evaluate("""document.getElementsByClassName("btn")[0].click();""") + + def clear_app_data(self): + pass + + def send_otp(self, otp: str): + self.page.evaluate(""" (otp)=> document.getElementById("sms_code").value = otp""", otp) + + def reset_air_plan_mode(self): + subprocess.call( + "/Users/panlei/Library/Android/sdk/platform-tools/adb shell settings put global airplane_mode_on 1", + shell=True) + time.sleep(1) + subprocess.call( + "/Users/panlei/Library/Android/sdk/platform-tools/adb shell am broadcast -a android.intent.action.AIRPLANE_MODE", + shell=True) + time.sleep(1) + subprocess.call( + "/Users/panlei/Library/Android/sdk/platform-tools/adb shell settings put global airplane_mode_on 0", + shell=True) + time.sleep(1) + subprocess.call( + "/Users/panlei/Library/Android/sdk/platform-tools/adb shell am broadcast -a android.intent.action.AIRPLANE_MODE", + shell=True) + time.sleep(10) + + +if __name__ == '__main__': + proxy = { + "server": "http://gw.ntnt.io:5959", + "username": "panleicim-cc-any-sid-1112", + "password": "M3PZAXgW5V27" + } + contact = ContactPojo(phone_number="755667750", passport_number="5123456789", last_name="PAN", first_name="Lei", + mail="panleicim@gmail.com", ccid="", position=0) + CommandorPage().start_page(None, contact) diff --git a/valid_profile.xlsx b/valid_profile.xlsx index 781212e3d8e6ca497a17751b21b3591db08b3523..4b9fac9c29c7d772e9fbebe2a64b28a291db06eb 100644 GIT binary patch delta 11470 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 eC*=S7YAgZ*$z2Hi=TBax