Как щелкнуть элемент внутри iframe - PullRequest
0 голосов
/ 08 января 2019

В настоящее время я пытаюсь щелкнуть ссылку "начального уровня" в iframe для этого веб-сайта: https://a127 -jobs.nyc.gov / index_new.html? Category = CAS

К сожалению, URL не меняется, если я нажимаю начальный уровень, поэтому я вынужден автоматизировать.

Я не уверен, что делать, если проблема в том, что я ввел неправильный iframe? кажется, только один, но я могу ошибаться.

from selenium import webdriver
import time

#webdriver
driver = webdriver.Firefox(executable_path="/Users/alexandrubordei/Desktop/geckodriver")

#get the website
driver.get ("https://a127-jobs.nyc.gov/index_new.html?category=CAS")

time.sleep(10)

#switch to iframe
iframes = driver.find_elements_by_tag_name("iframe")

driver.switch_to.frame(iframes[0])

time.sleep(10)

#click element "entry level"
driver.find_element_by_xpath('//*[@id="ti_S13"]').click()

Когда я запускаю свой код, кажется, что все работает, кроме ссылки, которая не нажата. Результаты моего поиска не сужены.

Однако я не получаю никаких ошибок. Я получаю сообщение об ошибке:

Process finished with exit code 0

Ответы [ 2 ]

0 голосов
/ 08 января 2019

К click() для элемента с текстом начального уровня , так как требуемые элементы находятся в пределах <iframe>, поэтому необходимо:

  • Индуцируйте WebDriverWait для желаемого кадра, который будет доступен, и переключитесь на него .
  • Induce WebDriverWait для желаемого элемента, который будет активен для клика .
  • Вы можете использовать следующее решение:

    • Кодовый блок:

      from selenium import webdriver
      from selenium.webdriver.support.ui import WebDriverWait
      from selenium.webdriver.support import expected_conditions as EC
      from selenium.webdriver.common.by import By
      
      driver = webdriver.Firefox(executable_path=r'C:\Utility\BrowserDrivers\geckodriver.exe')
      driver.get("https://a127-jobs.nyc.gov/index_new.html?category=CAS")
      WebDriverWait(driver, 10).until(EC.frame_to_be_available_and_switch_to_it((By.XPATH,"//iframe[@id='ptifrmtgtframe' and @name='TargetContent']")))
      WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.PARTIAL_LINK_TEXT, "Entry-Level"))).click()
      
  • Снимок браузера:

entry_level

Здесь вы можете найти соответствующую дискуссию по Способы работы с #document в iframe

0 голосов
/ 08 января 2019

Вы должны щелкнуть элемент a внутри этого идентификатора

driver.find_element_by_xpath('//*[@id="ti_S13"]/a').click()
...