Προς το περιεχόμενο

Πρόβλημα με Python Selenium xpath error


bilakos26

Προτεινόμενες αναρτήσεις

Δημοσ. (επεξεργασμένο)

Καλησπέρα! 

Είμαι καινούργιος στον προγραμματισμό, ωστόσο προσπαθώ να με έχω συνεχώς σε απασχόληση αυτές τις μέρες της καραντίνας.
Προσπαθώ να φτιάξω ένα script που να κάνει αυτόματη σύνδεση στο Stoiximan.gr , αλλά συνέχεια έχω error με το xpath της σελίδας το οποίο μου λέει πως δεν το βρίσκει. Έχω δοκιμάσει τα πάντα από ότι έχω βρει στο ίντερνετ διαθέσιμο χωρίς κανένα αποτέλεσμα.

from time import sleep
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import login_data

def main():
    options = webdriver.ChromeOptions() 
    options.headless = False
    options.add_experimental_option("excludeSwitches", ["enable-logging"])
    browser = webdriver.Chrome(options=options, executable_path=r'C:\Users\bilakos\Documents\DRIVERS\chromedriver.exe')
    browser.get("https://www.stoiximan.gr")
    sleep(5)

    login_data.login(browser)


main()

Εδώ είναι η συνάρτηση που κάνω import:

def login(browser):
    username = 'Username'
    password = 'password'
    #Κάνει κλικ στο κουμπή είσοδος 
    eisodos = browser.find_element_by_xpath("""//*[@id="landing-page-modal"]/div/div[2]/div[1]/p[2]/a""")
    eisodos.click()
    sleep(5)
    
    #Εδώ είναι το σημείο που βρίσκει το σημείο για την εκχώρηση του username
    username_input = browser.find_element_by_xpath("""//[@id="js-login-form"]/div[1]/div[1]/input""")
    username_input.click()
    username_input.send_keys(username)
    
    #Εδώ είναι το σημείο που βρίσκει το σημείο για την εκχώρηση του password
    password_input = browser.find_element_by_xpath("""//[@id="js-login-form"]/div[2]/div[1]/input""")
    password_input.click()
    password_input.send_keys(password)
    
    #Εδώ εφόσον όλα τα παραπάνω έχουν ολοκληρωθεί, πατάει το κουμπί της σύνδεσης
    login_button = browser.find_element_by_xpath("""//*[@id="js-login-button"]""")
    login_button.click()

    sleep(10)

Και αυτό είναι το error που μου εμφανίζει:

selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"xpath","selector":"//*[@id="js-login-form"]/div[2]/div[1]/input"}
  (Session info: chrome=87.0.4280.88)

Το error το εμφανίζει τόσο για το xpath του Username όσο και για του Password. Για το κουμπί της σύνδεσης δεν έχω δοκιμάσει ακόμη κάτι.

Όποιος έχει κάποια ιδέα και θέλει να βοηθήσει θα το ήμουν ευγνώμων.

Επεξ/σία από bilakos26
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Δεν ξέρω αν βοηθάω, αλλά κάποια στιγμή που είχα ανάλογο πρόβλημα, το πήρα με το parent αυτού που ήθελα.

Ήταν όμως σε πίνακα και όχι σε φόρμα.

Δοκίμασε και βλέπεις.

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Δημοσ. (επεξεργασμένο)
2 ώρες πριν, Lanike71 είπε

Δεν ξέρω αν βοηθάω, αλλά κάποια στιγμή που είχα ανάλογο πρόβλημα, το πήρα με το parent αυτού που ήθελα.

Ήταν όμως σε πίνακα και όχι σε φόρμα.

Δοκίμασε και βλέπεις.

@Lanike71Φίλε όντας άσχετος, βοήθησε με να καταλάβω, τι εννοείς parent;

Επεξ/σία από bilakos26
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Δημοσ. (επεξεργασμένο)

@Lanike71

3 ώρες πριν, Lanike71 είπε

Δεν ξέρω αν βοηθάω, αλλά κάποια στιγμή που είχα ανάλογο πρόβλημα, το πήρα με το parent αυτού που ήθελα.

Ήταν όμως σε πίνακα και όχι σε φόρμα.

Δοκίμασε και βλέπεις.

def login(browser):
    username = 'Username'
    password = 'password'
    eisodos = browser.find_element_by_xpath("""//*[@id="landing-page-modal"]/div/div[2]/div[1]/p[2]/a""")
    eisodos.click()
    sleep(5)
    
    ##############################################################################
    child_elem = browser.find_element_by_xpath("//*[@type='text']") 
    parent_elem = child_elem.find_element_by_xpath('..')
    parent_elem.click()
    parent_elem.send_keys(username)
    ################################################################################
    
    password_input = browser.find_element_by_xpath("""//[@id="js-login-form"]/div[2]/div[1]/input""")
    password_input.click()
    password_input.send_keys(password)
    login_button = browser.find_element_by_xpath("""//*[@id="js-login-button"]""")
    login_button.click()


    sleep(10)

Λογικά εννοούσες κάτι τέτοιο ως parent. Με βάση αυτό πάντως ούτε και τώρα δούλεψε.

Μου εμφανίζει το εξής error αυτή την φορά:

selenium.common.exceptions.ElementClickInterceptedException: Message: element click intercepted: Element <div class="bet-mentor-widget__input-wrapper">...</div> is not clickable at point (752, 785). Other element would receive the click: <iframe src="/myaccount/login" frameborder="0"></iframe>
  (Session info: chrome=87.0.4280.88)

Λέει πως δεν είναι επιλέξιμο. 

Επεξ/σία από bilakos26
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Βρήκα την λύση. Τελικά κάποιος μου απαντήσε στο stack overflow και μου είπε ότι αν αλλάξω το url και αντί για https://www.stoiximan.gr , να  βάλω https://www.stoiximan.gr/myaccount/login και έτσι δούλεψε. Απίστευτο;;

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...