Я не видел, чтобы найти способ нажать на логин с помощью Selenium - PullRequest
2 голосов
/ 13 мая 2019

Я пытаюсь настроить бота для входа в свою учетную запись, однако я не могу найти способ использовать Python и Selenium.

Вот веб-сайт: www.shopee.sg

Я пробовал зависать, находя xpath.но ничего из этого не похоже на работу.

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

url = 'https://shopee.sg/'

driver = webdriver.Chrome('E:/users/Asashin/Desktop/Bots/others/chromedriver.exe')
driver.get(url)

actions = ActionChains(driver)
wait = WebDriverWait(driver, 10)

driver.find_element_by_xpath('//button[text()="English"]').click()

time.sleep(2)

driver.find_element_by_class_name('shopee-popup__close-btn').click()

time.sleep(2)

firstLevelMenu = driver.find_element_by_xpath('/ul[@class="navbar__links"]')
action.move_to_element(firstLevelMenu).perform();

secondLevelMenu = driver.find_element_by_xpath("//a[contains(text(),'Login')]");
secondLevelMenu.click();

Вот некоторые программы, которые он не смог выполнить или найти:

actions.move_to_element(knownElement, 10, 25).click().build().perform()
actions.click()
actions.perform()
nav = driver.find_element_by_css_selector('li["navbar__link navbar__link--account navbar__link--tappable navbar__link--hoverable navbar__link-text navbar__link-text--medium"]')
a = driver.findElement(By.linkText('Login'))
actions.move_to_element(nav).moveToElement(a)
time.sleep (1)
actions.click(a)
actions.perform()

nav = driver.find_element_by_css_selector('li["navbar__link navbar__link--account navbar__link--tappable navbar__link--hoverable navbar__link-text navbar__link-text--medium"]')
actions.move_to_element(nav).perform()
wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR, "li[login]"))).click()                                       
continue_link = driver.find_element_by_link_text('Login')

actions.move_to_element(continue_link)
actions.click(continue_link)
actions.perform()

driver.find_element_by_link_text("Login").click()

driver.find_element_by_xpath('//div[@class="navbar-wrapper container-wrapper"]//div[@class="container navbar"]/ul[@class="navbar__links"]//li[@class="navbar__link navbar__link--account navbar__link--tappable navbar__link--hoverable navbar__link-text navbar__link-text--medium"]//li[contains(text(),"Login")]').click(

Я ожидаю, что он щелкнет.но все они выскакивают эту ошибку:

selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"xpath","selector":"/ul[@class="navbar__links"]"}

Это всегда результат:

selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"xpath","selector":"/ul[@class="navbar__links"]"}

Ответы [ 2 ]

1 голос
/ 13 мая 2019

В первой попытке есть две проблемы

Отсутствует / в xpath '/ul[@class="navbar__links"]', должно быть '//ul[@class="navbar__links"]'

Кнопка входа имеет тег <li>, а не *Тег 1009 *, должен быть '//li[contains(text(), "Login")]'

firstLevelMenu = driver.find_element_by_xpath('//ul[@class="navbar__links"]')
action.move_to_element(firstLevelMenu).perform();

secondLevelMenu = driver.find_element_by_xpath('//li[contains(text(), "Login")]');
secondLevelMenu.click();

Во второй попытке вы используете недопустимый css_selector, вы не упомянули атрибут класса

nav = driver.find_element_by_css_selector('li[class="navbar__link navbar__link--account navbar__link--tappable navbar__link--hoverable navbar__link-text navbar__link-text--medium"]')

Но это приводитв любом случае, к двум элементам, sign up и login, поэтому вы получите первый (sign up).Вы должны использовать первый подход.

0 голосов
/ 13 мая 2019

Мне удалось найти элемент панели навигации, используя:

//ul[@class="navbar__links"]

Примечание: у вас есть один "/", а я использовал "//" для xpath

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...