我看过类似的问题,我认为我要寻找的是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")
答案 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")
浏览器快照: