Не нажимается кнопка на сайте selenium
пытаюсь заставить программу войти на сайт. Для этого надо для начала перейти на страницу, где просят пароль (если пытаюсь задать ссылку https://edostavka.by/login?screen=withPassword - программа все равно открывает https://edostavka.by/login?screen=phone)
И при этом неважно какую ссылку я ставлю, selenium все равно не видит кнопку, как бы я её не искал(через XPATH, LINK_TEXT, CLASS_NAME) и выдает ошибку:
Message: no such element: Unable to locate element: {"method":"link text","selector":"Войти с паролем"}
(Session info: chrome=108.0.5359.125)
Stacktrace:
Backtrace:
(No symbol) [0x00FEF243]
(No symbol) [0x00F77FD1]
(No symbol) [0x00E6D04D]
(No symbol) [0x00E9C0B0]
(No symbol) [0x00E9C22B]
(No symbol) [0x00ECE612]
(No symbol) [0x00EB85D4]
(No symbol) [0x00ECC9EB]
(No symbol) [0x00EB8386]
(No symbol) [0x00E9163C]
(No symbol) [0x00E9269D]
GetHandleVerifier [0x01289A22+2655074]
GetHandleVerifier [0x0127CA24+2601828]
GetHandleVerifier [0x01098C0A+619850]
GetHandleVerifier [0x01097830+614768]
(No symbol) [0x00F805FC]
(No symbol) [0x00F85968]
(No symbol) [0x00F85A55]
(No symbol) [0x00F9051B]
BaseThreadInitThunk [0x771800F9+25]
RtlGetAppContainerNamedObjectPath [0x779C7BBE+286]
RtlGetAppContainerNamedObjectPath [0x779C7B8E+238]
Вместо sleep использовал WebDriverWait и ExpectedConditions, но разницы не было. Из того, что вычитал - возможно как-то на это влияют iframe или scripts на странице. Но iframe 4 штуки и все вроде бы пустые, а что со scripts делать и нужно ли так и не понял.
from selenium import webdriver
import time
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.service import Service
from fake_useragent import UserAgent as ua
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
ua = ua(browsers='chrome')
driver_service = Service(executable_path=r'C:\Users\37533\Desktop\dostavka\dostavka\chromedriver\chromedriver.exe')
options = webdriver.ChromeOptions()
options.add_argument(f'user-agent={ua}')
driver = webdriver.Chrome(service=driver_service)
driver.maximize_window()
#url = 'https://edostavka.by/login?screen=withPassword'
url = 'https://edostavka.by/login?screen=phone'
try:
driver.get(url=url)
time.sleep(3)
driver.find_element(By.NAME, 'phone').send_keys('132456789')
driver.find_element(By.LINK_TEXT, 'Войти с паролем').send_keys(Keys.ENTER)
time.sleep(5)
except Exception as e:
print(e)
finally:
driver.close()
driver.quit()
Ответы (2 шт):
Попробуйте использовать поиск по xpath следующим образом:
driver.find_element(By.XPATH, "//span[text()='Войти с паролем']")
С помощью LINK_TEXT и PARTIAL_LINK_TEXT я так же не смог найти элемент, но подобным образом элемент был найден:
url = 'https://edostavka.by/login?screen=phone'
driver.get(url)
driver.find_element(By.XPATH, "//span[text()='Войти с паролем']")
print('element found')
вывод:
element found
<iframe> может повлиять на поиск, если элемент находится внутри этого тэга, но в данном случае это не так.
С тэгами <script> вам наверняка вообще не нужно ничего делать при процессе парсинга или автоматизации через selenium
driver.get('https://edostavka.by/login?screen=phone')
# Нажимаем на принять cookies если всплывает окно
driver.find_element(By.XPATH, '//*[@id="__next"]/div[5]/div[2]/div[3]/button[2]').click()
# time.sleep(3)
# Или закрываем окно
driver.find_element(By.XPATH, '//*[@id="__next"]/div[5]/div[2]/div[1]').click()
time.sleep(3)
# Нажимаем на Войти с паролем
driver.find_element(By.XPATH, '//*[@id="__next"]/div[5]/div/div[1]/div[2]/div/div[2]/button').click()
time.sleep(3)
