У меня возникла проблема при попытке выбрать класс тега div, в котором есть пробелы.
Это структура страницы:
<div class = "sadasd-dashboardtab even asdasd-syndicating_from_my_file" id = "124121_1540012412412414">
<div id = "124121_154006585856856858">
<span class = "label">Syndicating From My File</span>
<button class = "column-dropdown" title = "Click for more tab options"></button>
</div>
</div>
Это мои попытки кода для этой части:
#syndicating_button = driver.find_element_by_xpath("//span[text()='Syndicating From My File']")
#syndicating_button = driver.find_element_by_xpath("//div[@class='yui3-dashboardtab even s-tab-syndicating_from_my_site']")
syndicating_button = driver.find_element_by_css_selector("div.yui3-dashboardtab.even.s-tab-syndicating_from_my_site")
syndicating_button.click()
Это исключение @Andersson. NoSuchElementException: нет такого элемента: невозможно найти элемент: {"method": "css selector", "selector": "div.yui3-dashboardtab.even.s-tab-Syndi cating_from_my_site" } (Информация о сеансе: chrome = 69.0.3497.100) (Информация о драйвере: chromedriver = 2.43.600210 (68dcf5eebde37173d4027fa8635e332711d2874a), платформа = Windows NT 10.0.17134 x86_64)
Добавить подождите ... теперь это работает?
Не помещайте релевантную информацию в комментарии. Вместо этого отредактируйте вопрос и добавьте туда соответствующую информацию. Если вы сделали это в ответ на чужой комментарий, @ упомяните их и скажите, что вы добавили информацию, которую они запросили, в вопрос. Таким образом, будущим читателям не нужно читать все комментарии, чтобы получить всю необходимую информацию.






Ваша проблема не имеет ничего общего с "пробелы" / "пробелы", так как ваши селекторы должны работать хорошо ... если элемент присутствует в DOM. Попробуйте подождать, пока элемент не появится в DOM и не станет кликабельным:
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait as wait
from selenium.webdriver.support import expected_conditions as EC
wait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, "//span[text()='Syndicating From My Site']"))).click()
OK. Затем проверьте, находится ли элемент внутри iframe (если HTML выглядит как <iframe>...<div class = "yui3-dashboardtab ...>....</div>...</iframe>)
Да, это iframe!
Вам необходимо переключиться на iframe перед обработкой элемента
Если iframe выглядит так: "<iframe style = " position: absolute; ширина: 1 пикс; высота: 1 пикс; справа: 1 пиксель; внизу: 1px; граница: 0; "src = " fontTracker.html "> </iframe>". Как его искать?
Попробуйте iframe = driver.find_element_by_xpath("//iframe[@src='fontTracker.htm']") или то же самое с подождите wait(driver, 10).until(EC.frame_to_be_available_and_switch_to_it(driver.find_element_by_xpath("//iframe[@src='fontTracker.htm']")))
Это исключение, которое я получил: NoSuchElementException: нет такого элемента: невозможно найти элемент: {"method": "xpath", "selector": "// iframe [@ src = 'fontTracker.htm']"}
Попробуйте реализовать ExplicitWait, как в моем предыдущем комментарии. Также обратите внимание, что iframe может быть расположен в другом iframe, поэтому вам нужно последовательно переключаться на каждый iframe.
Поделиться исключением