Python + Selenium - Невозможно найти элемент изображения (не удается щелкнуть изображение) - PullRequest
0 голосов
/ 27 апреля 2020

enter image description here Я пытаюсь создать макрос, который открывает все мои онлайн-классы на Chrome (потому что вход в систему раздражает, особенно если вам приходится делать это 8 раз каждое утро) .

Кстати, я использую Python 3.8, Chrome 81.0.4044.122 и последнюю версию Selenium.

До сих пор я нажимал кнопку, используя: driver = webdriver.Chrome() driver.find_element_by_xpath("PATH_OF_ELEMENT").click() А потом я найти кнопку входа, которая имеет изображение вместо текста. Я пробовал XPath, CSS Селектор, идентификатор, имя, ссылка текста, ActionChains (move_to), ничего не работает.

Вот HTML: , нажмите здесь, пожалуйста, .

Кнопка, которую я пытаюсь нажать, - это кнопка с тегом a.

Я потратил 30 минут на поиски в Google, и все, что я нашел, это вопросы переполнения стека из 6 лет go. Они предложили мне использовать WebDriverWait или изменить фрейм. Ни один из них не сработал (я мог ошибиться). Я новичок в Selenium, поэтому будьте добры и объясните сложные вещи.

Как найти правильный XPath кнопки с изображением и щелкнуть по ней?

driver.find_element_by_css_selector ('. Nice-select'). Click () driver.find_element_by_xpath ("/ html / body / div 1 / div [3] / div / div / div / div / div / div 2 / div 1 / div / ul / li 2"). click () driver.find_element_by_xpath ('/ html / body /div1/div[3]/div/div/div/div/div/div2/div2/div/span').click () driver.find_element_by_xpath ('/ html / body / div 1 / div [3] / div / div / div / div / div / div 2 / div 2 / div / ul / li [19] '). Click () driver.find_element_by_xpath (' / html / body / div 1 / div [3] / div / div / div / div / div / div 2 / div [3] / div / span '). click () driver.find_element_by_xpath (' / html / body / div 1 / div [3] / div / div / div / div / div / div 2 / div [3] / div / ul / li [3] '). click () driver.find_element_by_xpath (' / html / body / div 1 / div [3] / div / div / div / div / div / div 2 / div [4] / div / span '). Click () driver.find_element_by_xpath (' / HTML / тело / DIV * * 1 тысяча пятьдесят-три / дел [3] / DIV / DIV / DIV / DIV / DIV / дел 2 / дел [ 4] / div / ul / li [3] '). Click () driver.find_element_by_xpath (' / html / body / div 1 / div [3] / div / div / div / div / div /div2/div[5]/a').click()

1 Ответ

1 голос
/ 27 апреля 2020

Попробуйте следующее CSS Селектор:

.my_menu>a

Код должен выглядеть следующим образом:

driver.find_element_by_css_selector(".my_menu>a").click()

Также попробуйте найти элемент с явным ожиданием:

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


WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, ".my_menu>a"))).click()

Я протестировал со следующим блоком кода (в результате появится всплывающее окно с 2 вариантами):

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


driver = webdriver.Chrome()
driver.get("https://oc31.ebssw.kr/onlineClass/search/onlineClassSearchView.do?schulCcode=00898&schCssTyp=online_mid")
WebDriverWait(driver, 20).until(EC.element_to_be_clickable(
    (By.CSS_SELECTOR, ".my_menu>a"))).click()
time.sleep(5)

Надеюсь, это поможет вам!

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