J'essaie de me connecter à la page Web en particulier mais je ne clique pas sur le bouton Connexion
:
<div class="span3 float-right" style="float:right;"> <button type="submit" class="btn btn-primary">Connect</button> </div>
J'ai essayé de trouver un élément par css, par nom, etc. mais je ne sais pas pourquoi ne clique pas sur le bouton pour se connecter
La partie html est la suivante
browser.get('https://www.tsago.gr/eshop/account') print('Browser Opened') username = browser.find_element_by_id('email') username.send_keys(email) password = browser.find_element_by_id('password') password.send_keys(pwd) time.sleep(2) sing_in = browser.find_element_by_xpath('//*[@class="btn btn-primary"]') sing_in.click() print('Login Clicked')
Le nom d'utilisateur et le mot de passe sont écrits et ils sont corrects
3 Réponses :
Le sélecteur css suivant doit identifier de manière unique le bouton que vous recherchez:
driver.find_element_by_css_selector('div.span3.float-right > button')
cela fonctionne pour moi:
driver.find_element_by_xpath('//div[contains(@class,"span3")]/button[contains(@class,"btn-primary")]")
en général, vous devez vous assurer d'identifier le bon élément avant de coder. pour ce faire - utilisez devTools (f12 sur chrome / firefox), et exécutez votre requête dans l'onglet 'console'
pour l'identification de xpath essayez $ x , c'est-à-dire: $ x ('// button [@ type = "submit"]')
.
pour le sélecteur css utilisez $$ comme ceci: $$ ("div.someClass # someID")
vous pouvez ensuite survoler les résultats et les éléments trouvés seraient mis en surbrillance
modifier : J'ai remarqué que vous aviez des problèmes avec l'option css, vous pouvez également essayer
driver.find_element_by_css_selector('div.span3 > button[type="submit"]').click()
Il semble que vous étiez assez proche. Peut-être que la Barre de messages des cookies était l'obstacle et vous pouvez soit accepter les cookies , soit faire défiler le bouton Connect pour le voir et vous pouvez utiliser la solution suivante:
Bloc de code:
Browser Opened Login Clicked
Sortie de la console:
from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC options = webdriver.ChromeOptions() options.add_argument("start-maximized") options.add_argument("--disable-extensions") # options.add_argument('disable-infobars') browser = webdriver.Chrome(chrome_options=options, executable_path=r'C:\Utility\BrowserDrivers\chromedriver.exe') browser.get('https://www.tsago.gr/eshop/account') print('Browser Opened') WebDriverWait(browser, 30).until(EC.visibility_of_element_located((By.CSS_SELECTOR, "input#email[name='email']"))).send_keys("Nikos") browser.find_element_by_css_selector("input#password[name='password']").send_keys("Nikos") browser.execute_script("window.scrollBy(0,250)", ""); browser.find_element_by_css_selector("div.control-group div.span3 button.btn.btn-primary").click() print('Login Clicked')
Instantané du navigateur:
Essayez
sing_in = browser.find_element_by_xpath ('// button [@ type = "submit"]')
Non rien .. y a-t-il un moyen de cliquer sur Entrée par code? à la place en cliquant sur le bouton? peut-être qu'il a besoin de concentration?