Как выбрать элемент JavaScript с селеном - PullRequest
0 голосов
/ 17 июня 2019

У меня есть фрагмент страницы HTML.Я хочу знать, как я могу использовать селен, чтобы нажать на этот JavaScript.Фактическая ссылка https://www.cmegroup.com/trading/interest-rates/countdown-to-fomc.html

<a id="ctl00_MainContent_ucViewControl_IntegratedFedWatchTool_lbPTree" href="javascript:__doPostBack('ctl00$MainContent$ucViewControl_IntegratedFedWatchTool$lbPTree','')">Probabilities</a>

Я получаю эту ошибку:

selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"css selector","selector":"a[id='ctl00_MainContent_ucViewControl_IntegratedFedWatchTool_lbPTree']"}

Я пробовал ниже, но не повезло!

link = driver.find_element_by_css_selector("a[title='Probabilities']")[0]

link = driver.find_element_by_css_selector("a*='Probabilities'")
link.click()

Iхотите иметь селен, чтобы иметь возможность нажимать на эту кнопку с помощью Python.

Ответы [ 3 ]

2 голосов
/ 17 июня 2019

Эта кнопка находится в iframe, вам нужно изменить фокус веб-драйвера на фрейм, для этого вы можете использовать этот код

Код:

wait = WebDriverWait(driver,10)

driver.maximize_window()

driver.get("https://www.cmegroup.com/trading/interest-rates/countdown-to-fomc.html")

wait.until(EC.frame_to_be_available_and_switch_to_it((By.CSS_SELECTOR, "iframe[id^='cmeIframe-']")))

wait.until(EC.element_to_be_clickable((By.LINK_TEXT, 'Probabilities'))).click()

Вам необходимо импортировать следующие данные:

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

Дайте мне знать, если у вас есть какие-либо вопросы.

1 голос
/ 17 июня 2019

Требуемый элемент является JavaScript включенным элементом, поэтому click() для элемента, который вы должны вызвать WebDriverWait для element_to_be_clickable(), и вы можете использовать любой из следующих Стратегии локатора :

  • Использование CSS_SELECTOR:

    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "a[id*='_MainContent_ucViewControl_IntegratedFedWatchTool_']"))).click()
    
  • Использование LINK_TEXT:

    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.LINK_TEXT, "Probabilities"))).click()
    
  • Использование XPATH:

    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//a[contains(@id, '_MainContent_ucViewControl_IntegratedFedWatchTool_') and text()='Probabilities']"))).click()
    
  • Примечание : необходимо добавить следующий импорт:

    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support import expected_conditions as EC
    
0 голосов
/ 17 июня 2019

, поскольку ваш элемент имеет атрибут id, вы можете использовать его, чтобы найти его и щелкнуть по нему

 driver.find_element_by_id('ctl00_MainContent_ucViewControl_IntegratedFedWatchTool_lbPTree')
...