簡體   English   中英

無法使用 Selenium 和 Python 單擊“登錄”按鈕

[英]Unable to click on "Sign In" button with Selenium and Python

我正在嘗試使用網站上的用戶和密碼自動登錄,這是一個:

https://www.esselunga.it/area-utenti/applicationCheck?appName=esselungaEcommerce&daru=https%3A%2F%2Fwww.esselungaacasa.it%3A443%2Fecommerce%2Fnav%2Fauth%2Fsupermercato%2Fhome.html%3F&loginType=light

我設法通過 Selenium 插入了用戶名和密碼,但我無法單擊“Accedi”按鈕,這是意大利語中“登錄”的意思。

HTML:

<div>
   <button value="Accedi" type="submit">Accedi</button>
</div>

我嘗試了以下 python 代碼:

第一次嘗試:

WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, "/html/body/div[1]/div[2]/div[2]/div[1]/form[1]/div/button"))).click()

第二次嘗試:

button = driver.find_element(by=By.CSS_SELECTOR, value="Accedi")

第三次嘗試:

button = driver.find_element(by=By.LINK_TEXT, value="Accedi")
button.click()

但沒有成功。 你能幫我完成這個個人項目嗎?

你可以試試:

# Needed libs
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
import time

#Open the browser
driver = webdriver.Edge()
url = 'https://www.esselunga.it/area-utenti/applicationCheck?appName=esselungaEcommerce&daru=https%3A%2F%2Fwww.esselungaacasa.it%3A443%2Fecommerce%2Fnav%2Fauth%2Fsupermercato%2Fhome.html%3F&loginType=light'
driver.get(url)

user = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.ID, f"gw_username")))
user.send_keys('User@gmai.com')
user = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.ID, f"gw_password")))
user.send_keys('password')
login_button = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, f"//button[@value='Accedi']")))
login_button.click()
time.sleep(10)

但我在這里看到一個大問題......問題是你有一個驗證碼。 有了我給你的提示,你將解決點擊元素的問題,但現在你需要通過驗證碼......這將是一個不同的主題,因為驗證碼是為避免機器人而創建的(Selenium 是一個管理你的瀏覽器的機器人).

對於驗證碼的問題,您可以查看其他答案: Captctha

我希望它有所幫助!

要首先單擊Accedi ,您必須單擊<iframe>中的reCAPTCHA復選框,因此您必須:

  • 誘導WebDriverWait以等待所需的框架可用並切換到它

  • 誘導WebDriverWait以使reCAPTCHA元素可單擊

  • 誘導WebDriverWait使Accedi元素可點擊

  • 您可以使用以下定位器策略

    • 使用CSS_SELECTOR

       driver.get('https://www.esselunga.it/area-utenti/applicationCheck?appName=esselungaEcommerce&daru=https%3A%2F%2Fwww.esselungaacasa.it%3A443%2Fecommerce%2Fnav%2Fauth%2Fsupermercato%2Fhome.html%3F&loginType=light') WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "a#accettaTuttiCookie"))).click() driver.find_element(By.CSS_SELECTOR, "input#gw_username").send_keys("LeonardoVarè@stackoverflow.com") driver.find_element(By.CSS_SELECTOR, "input#gw_password").send_keys("LeonardoVarè") WebDriverWait(driver, 20).until(EC.frame_to_be_available_and_switch_to_it((By.CSS_SELECTOR,"iframe[title='reCAPTCHA']"))) WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "span#recaptcha-anchor"))).click() driver.switch_to.default_content() WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "button[value='Accedi']"))).click()
  • 注意:您必須添加以下導入:

     from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.common.by import By from selenium.webdriver.support import expected_conditions as EC

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM