Python Selenium выберите класс div с пробелами

У меня возникла проблема при попытке выбрать класс тега 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 20.10.2018 23:59

Это исключение @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)

PyRar 21.10.2018 00:16

Добавить подождите ... теперь это работает?

JeffC 21.10.2018 00:37

Не помещайте релевантную информацию в комментарии. Вместо этого отредактируйте вопрос и добавьте туда соответствующую информацию. Если вы сделали это в ответ на чужой комментарий, @ упомяните их и скажите, что вы добавили информацию, которую они запросили, в вопрос. Таким образом, будущим читателям не нужно читать все комментарии, чтобы получить всю необходимую информацию.

JeffC 21.10.2018 00:38
Почему в 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 может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
4
259
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Ваша проблема не имеет ничего общего с "пробелы" / "пробелы", так как ваши селекторы должны работать хорошо ... если элемент присутствует в 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>)

Andersson 21.10.2018 00:36

Да, это iframe!

PyRar 21.10.2018 00:41

Вам необходимо переключиться на iframe перед обработкой элемента

Andersson 21.10.2018 00:44

Если iframe выглядит так: "<iframe style = " position: absolute; ширина: 1 пикс; высота: 1 пикс; справа: 1 пиксель; внизу: 1px; граница: 0; "src = " fontTracker.html "> </iframe>". Как его искать?

PyRar 21.10.2018 00:54

Попробуйте iframe = driver.find_element_by_xpath("//iframe[@src='fontTracker.htm‌​']") или то же самое с подождите wait(driver, 10).until(EC.frame_to_be_available_and_switch_to_it(driver.f‌​ind_element_by_xpath‌​("//iframe[@src='fon‌​tTracker.htm']")))

Andersson 21.10.2018 00:55

Это исключение, которое я получил: NoSuchElementException: нет такого элемента: невозможно найти элемент: {"method": "xpath", "selector": "// iframe [@ src = 'fontTracker.htm‌']"}

PyRar 21.10.2018 00:59

Попробуйте реализовать ExplicitWait, как в моем предыдущем комментарии. Также обратите внимание, что iframe может быть расположен в другом iframe, поэтому вам нужно последовательно переключаться на каждый iframe.

Andersson 21.10.2018 01:01

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