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.
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!")
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)
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.