如何在iframe中单击元素

时间:2019-01-07 22:28:51

标签: python-3.x selenium selenium-webdriver iframe webdriverwait

当前,我正尝试在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 :(得分:0)

您必须单击该ID内的a元素

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

答案 1 :(得分:0)

click()在文本上为入门级的元素上,因为所需元素在<iframe>中,因此您必须:

  • 诱导 WebDriverWait 以使所需的框架可用并切换到它。
  • 诱导 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

  

在这里您可以找到有关Ways to deal with #document under iframe的相关讨论