Problem
Ich versuche, mit Selen einige Informationen aus der Seite zu extrahieren. Zunächst habe ich auf der ersten Seite den Namen extrahiert. Und für wenige Felder ist die notwendige Eingabe standardmäßig gegeben.
Später drückte ich unten auf den Spendenknopf.
Jetzt wird eine neue Seite geladen. Und ich muss hier bestimmte Operationen durchführen. Aber ich konnte keine Operationen auf der neu geladenen Seite ausführen.
Unten wird der Code angegeben, bis auf die Schaltfläche „Spenden“ geklickt wird, gefolgt vom Code zum Extrahieren von Informationen von einer neuen Seite.
url = "https://donations.iskconbangalore.org/mobile-donation/?patronId=13340"
driver = webdriver.Chrome(executable_path=r'C:\Users\Admin\Downloads\chromedriver_win32\chromedriver')
driver.get(url)
name=driver.find_element(By.ID,"donorName").get_attribute("value")
print(a)
mobile=driver.find_element(By.ID,"donorMobile").get_attribute("value")
print(mobile)
inputamt = driver.find_element(By.ID,"O5")
inputamt.send_keys('500')
inputemail = driver.find_element(By.ID,"donorEmailId")
inputemail.send_keys('[email protected]')
radioButtons = driver.find_element(By.CLASS_NAME, "custom-control-label").click()
WebDriverWait(driver, 30).until(EC.element_to_be_clickable((By.XPATH, "//button[@class='btn order-btn2 donate-now']"))).click()
Jetzt, nachdem die Seite geladen ist, versuche ich bestimmte Operationen. Aber das Notieren findet statt. Ich wollte nach unten scrollen und auf die Kontoschaltfläche klicken.
zur Information habe ich ID und Klasse angegeben: id=”account-tab-btn” class=”account-section svelte-1mqsf83″
time.sleep(7)
driver.switch_to.window(driver.window_handles[0])
driver.get("https://donations.iskconbangalore.org/payment-gateway/")
# prints windows id
print(driver.window_handles)
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//button[@class='account-section svelte-1mqsf83']"))).click()
Lösung
Die Payment-Gateway-Seite befindet sich in einem Iframe, also müssen Sie zu diesem Iframe wechseln und dann die weiteren Aktionen ausführen:
Nach der folgenden Zeile:
WebDriverWait(driver, 30).until(EC.element_to_be_clickable((By.XPATH, "//button[@class='btn order-btn2 donate-now']"))).click()
Fügen Sie diese Zeile hinzu und versuchen Sie:
WebDriverWait(driver, 15).until(EC.frame_to_be_available_and_switch_to_it((By.CSS_SELECTOR, ".razorpay-checkout-frame"))) # switch to the payment-gateway iframe
time.sleep(1)
account_link = driver.find_element(By.XPATH, ".//*[starts-with(@class,'account-tab svelte-')]//div[@data-test-id='account-tab-btn']")
driver.execute_script("arguments[0].scrollIntoView(true)", account_link)
time.sleep(1)
account_link.click()
time.sleep(1)
driver.find_element(By.XPATH, ".//*[text()='Edit contact details']").click()
Beantwortet von – AbiSaran
Antwort geprüft von – Willingham (FixError Volunteer)