硒无法通过名称或ID,如何ID以及如何切换到iframe来查找元素

时间:2018-07-29 21:47:08

标签: python selenium

我看过类似的问题,我认为我要寻找的是iframe内部。但是我不知道如何切换到框架或搜索框架。有人可以帮忙吗?

实际上,我不确定这是否是iframe问题。如果是这样:

需要帮助1)找到iframe 2)然后切换到该iframe,以便我可以按以下方式通过名称或id将文本输入到元素中。

如果不是,那是什么问题?

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
main='http://www.hkexnews.hk/listedco/listconews/advancedsearch/search_active_main.aspx'


driver=webdriver.Chrome(path)
driver.get(main)
elem = driver.find_element_by_id("ct100_txt_stock_code")
elem = driver.find_element_by_name("ct100$txt_stock_code")

2 个答案:

答案 0 :(得分:2)

您可以使用以下工作代码段:

driver.get("http://www.hkexnews.hk/listedco/listconews/advancedsearch/search_active_main.aspx")

stock_code = WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.ID, "ctl00_txt_stock_code")))
stock_code.click()
stock_code.send_keys("12345")
time.sleep(5) # this is only to see the result

注意: ,您必须添加一些导入:

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

想法是使用WebDriverWait,它将等待至少10秒钟,直到元素可单击,然后才单击它。没有iframe,因此问题在于您的脚本速度太快,并试图单击DOM中当前不在的元素。 WebDriverWait解决了这个问题。

PS: :我建议看看documentation以获得更多信息。

答案 1 :(得分:2)

根据 url http://www.hkexnews.hk/listedco/listconews/advancedsearch/search_active_main.aspx将字符序列发送到文本为股票代码的元素,您需要诱导 WebDriverWait 以使所需的元素可点击,您可以使用以下代码块:

  • 代码块:

    from selenium import webdriver
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support import expected_conditions as EC
    
    main='http://www.hkexnews.hk/listedco/listconews/advancedsearch/search_active_main.aspx'
    options = webdriver.ChromeOptions() 
    options.add_argument("start-maximized")
    options.add_argument('disable-infobars')
    driver=webdriver.Chrome(chrome_options=options, executable_path=r'C:\Utility\BrowserDrivers\chromedriver.exe')
    driver.get(main)
    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//input[@class='arial12black' and @id='ctl00_txt_stock_code']"))).send_keys("51584821")
    
  • 浏览器快照:

hknews