使用 Selenium XPath 使用您的凭据登录

Log in with your credentials using Selenium XPath

我的目标是通过输入我的电子邮件地址和密码登录页面 (https://www.icribis.com/it/)。第一步是禁用 cookie,第二步是单击右上角的“ACCEDI”按钮。此时,我必须输入我的电子邮件和密码,然后单击“Accedi”按钮。我想念这最后一部分。这是我的部分代码:

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

url = 'https://www.icribis.com/it/'

driver = webdriver.Chrome()
wait = WebDriverWait(driver, 20)
driver.get(url)

time.sleep(2)

# Disable cookies
driver.execute_script('return document.querySelector("#usercentrics-root").shadowRoot.querySelector("#uc-center-container > div:nth-child(2) div > button:nth-child(3)")').click()

time.sleep(2)

# Click the button "ACCEDI"
driver.execute_script('return document.querySelector("body > section.menu > div.row.show-for-xlarge-up > div.large-10.medium-6.small-12.columns > div.large-12.medium-12.small-12.columns.text-right.menuTop > ul > li.openClick.text-left > a")').click()

time.sleep(2)

# Enter your email and password and click the button "Accedi"
# ...

driver.close()

我想通过使用XPath来解决,因为他们的写法对我来说似乎更简单紧凑,但是他们的工作原理我还不是很清楚。

我怎样才能完成我的剧本?

您不需要使用 JavaScript 查询来打开登录对话框

driver.execute_script('return document.querySelector("body > section.menu > div.row.show-for-xlarge-up > div.large-10.medium-6.small-12.columns > div.large-12.medium-12.small-12.columns.text-right.menuTop > ul > li.openClick.text-left > a")').click()

可以通过使用预期条件显式等待的常规 Selenium .click() 方法来完成。
在这种情况下,您将不需要在这里使用的硬编码暂停 time.sleep(2)
此代码有效且看起来更好:

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

url = 'https://www.icribis.com/it/'

driver = webdriver.Chrome()
wait = WebDriverWait(driver, 20)
driver.get(url)

time.sleep(2)

# Disable cookies
driver.execute_script('return document.querySelector("#usercentrics-root").shadowRoot.querySelector("#uc-center-container > div:nth-child(2) div > button:nth-child(3)")').click()

#login
wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR, "li.openClick.text-left"))).click()
wait.until(EC.visibility_of_element_located((By.XPATH, "//div[contains(@style,'block')]//input[@name='email']"))).send_keys("your_email")
wait.until(EC.visibility_of_element_located((By.XPATH, "//div[contains(@style,'block')]//input[@name='password']"))).send_keys("your_password")
wait.until(EC.visibility_of_element_located((By.XPATH, "//div[contains(@style,'block')]//input[@type='submit']"))).click()

您可以使用下面的输入电子邮件、密码并单击 Accedi 按钮。

wait.until(EC.visibility_of_element_located((By.XPATH, "//div[@class='dx']//input[@placeholder='Indirizzomail']"))).send_keys("EMAIL")

wait.until(EC.visibility_of_element_located((By.XPATH, "//div[@class='dx']//input[@placeholder='Password']"))).send_keys("PASSWORD")

wait.until(EC.element_to_be_clickable((By.XPATH,"//input[@class='button tiny lightRound rightIcon login']"))).click()