Войдите в систему, используя свои учетные данные, используя 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, так как их написание мне кажется более простым и компактным, но как они работают мне пока не очень понятно.

Как я могу закончить свой сценарий?

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
0
33
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Вам не нужно использовать запрос 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()

Спасибо за Ваш ответ. Мой единственный вопрос (в данном случае, но и вообще): как найти полный XPath? В таком случае, как вы нашли "//div[contains(@style,'block')]//input[@name='email']"?

LJG 21.03.2022 14:38

Ну, вы должны научиться создавать правильные локаторы. Это не сложно, но это также не лучший подход к использованию автоматически сгенерированных локаторов. Просто погуглите что-нибудь вроде how to create good locators in selenium или selenium locators best practices, и он даст вам несколько руководств по этому поводу.

Prophet 21.03.2022 14:47

Вы можете использовать приведенное ниже поле, чтобы ввести адрес электронной почты, пароль и нажать кнопку 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()

Другие вопросы по теме