Butona Tıklatma

Merhabalar aşağıdaki kodda email gönder butonuna tıklatmak istiyorum, ancak olmuyor. Bu işlemi nasıl sağlayabilirim?

import time
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from webdriver_manager.chrome import ChromeDriverManager

options = Options()
# options.add_argument("--headless")

driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()), options=options)
driver.delete_all_cookies()

driver.get(
    "https://suchen.mobile.de/fahrzeuge/details.html?id=355902358&damageUnrepaired=NO_DAMAGE_UNREPAIRED&isSearchRequest=true&pageNumber=1&scopeId=C&sortOption.sortBy=relevance&action=topOfPage&top=1:1&searchId=034dde38-e567-1e56-6d64-b8c8783a0e20&ref=srp")
time.sleep(10)

'''
email_button = WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.LINK_TEXT, 'E-mail schreiben')))
email_button.click()
'''

try:
    button = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, "//span[contains(text(), 'E-Mail schreiben')]")))
    WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, "//span[contains(text(), 'E-Mail schreiben')]"))).click()
except Exception as e:
    print("Hata:", e)

    time.sleep(5)

driver.quit()

Merhaba,

Zaten konuyu açmışsınız, buradan devam edin. Yardımcı olabilecek birileri çıkarsa, yazar. Siteye baktım, sayfa açılırken bir tane bilgilendirme penceresi (popup) de açılıyor. Önce onu geçmeniz lazım. Sonra, sitenin kapatılabilir reklamlarından birisi tam da tıklamaya çalıştığınız butonun üstüne geliyor. Bu da, butonun görünememesine yol açıyor. Bahsettiğim bu reklamı ya kapatmalısınız ya da kaydırma çubuğunu aşağı kaydırıp, butonun görünür olmasını sağlamalısınız.

Şimdi, şöyle bir yöntem denedim.

Hızlı olalım, beklemekten kaynaklanan problemleri eleyelim diye sleep fonksiyonunu kaldırdım. Sayfaya girerken 3 saniyelik bir bekleme süresi var, o sahneyi geçer geçmez, düğmeyi sorgulayıp, ona tıklamaya çalışıyoruz. popup da biz email sayfasına geçince açılıyor.

Bu arada, chrome yerine firefox kullanıyorum.

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.firefox.options import Options
from selenium.webdriver.firefox.service import Service
from selenium.common.exceptions import NoSuchElementException, ElementClickInterceptedException

driver = webdriver.Firefox(service=Service("geckodriver"), options=Options())
driver.get("https://suchen.mobile.de/fahrzeuge/details.html?id=355902358&damageUnrepaired=NO_DAMAGE_UNREPAIRED&isSearchRequest=true&pageNumber=1&scopeId=C&sortOption.sortBy=relevance&action=topOfPage&top=1:1&searchId=034dde38-e567-1e56-6d64-b8c8783a0e20&ref=srp")

element = None
url = driver.current_url
while driver.current_url == url:
    try:
        if not element:
            element = driver.find_element(By.XPATH, '//*[@id="email-link-top"]')
        try:
            element.click()
        except ElementClickInterceptedException:
            pass
    except NoSuchElementException:
        pass


print("Done!")
1 Beğeni

Merhaba,

Sayfa açıldığında çıkan onay kutusuna tıklayınca sorun çözüldü. Onu da ‘EC.element_to_be_clickable’ ile yaptım. Ancak bu defa da açılan sayfa da kutucuğa veri göndermeye çalıştığımda hata alıyorum. xpath’ i kabul etmiyor. ChroPath, XPath Finder gibi birçok yerden temin ettim ama olmadı. Güncel kodumu ileteyim sizlere.

import time
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from webdriver_manager.chrome import ChromeDriverManager

options = Options()
# options.add_argument("--headless")

driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()), options=options)
driver.delete_all_cookies()

driver.get("https://suchen.mobile.de/fahrzeuge/details.html?id=355902358&damageUnrepaired=NO_DAMAGE_UNREPAIRED&isSearchRequest=true&pageNumber=1&scopeId=C&sortOption.sortBy=relevance&action=topOfPage&top=1:1&searchId=034dde38-e567-1e56-6d64-b8c8783a0e20&ref=srp")
time.sleep(5)
# accept the cookies
time.sleep(5)
WebDriverWait(driver, 5).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "button.mde-consent-accept-btn"))).click()
# click on E-Mail schreiben
WebDriverWait(driver, 5).until(EC.element_to_be_clickable((By.XPATH, "//div[@id='email-link-top-container']//span[contains(text(), 'E-Mail schreiben')]"))).click()
#click on Dein Name
username_input = WebDriverWait(driver, 15).until(EC.element_to_be_clickable((By.XPATH, "(//input[@placeholder='Vorname Name'])[1]"))).click()
time.sleep(15)
username_input.send_keys('Username')
time.sleep(5)

//input[@name='name'] xpath olarak şunu kullanırsanız muhtemelen sorun çözülecektir

Şimdi biraz inceleme fırsatı buldum. Email göndermek için butona tıklamanıza gerek yok aslında.
Şöyle basitçe email gönderebilirsiniz

import requests


email_url = "https://suchen.mobile.de/fahrzeuge/finanzierung"
email_body = {"adId":"<reklam_idsi>","countryCallingCode":"+49","emailAddress":"<email-adresiniz>","locale":"de","name":"<adınız>","phoneNumber":"<telefon_numaranız>","financingOptIn":True}

r = requests.post(email_url, json=email_body)

reklam idsi kısmı sizin url’inizde bulunan ?id=355902358 kısmı. buradan 355902358 i alıp string olarak adId kısmında kullanırsanız email gidecektir. response olarak bir şey dönmüyor fakat işlem başarılıysa (testlerime göre) http status 204 dönüyor ve böylece mail gitmiş oluyor.