# from selenium import webdriver from selenium.webdriver.chrome.service import Service from selenium.webdriver.chrome.options import Options from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC import time def traverse_iframes(driver, iframe_list=None): """ 递归遍历网页中的所有iframe :param driver: Selenium的WebDriver实例 :param iframe_list: 用于存储已遍历的iframe元素的列表,默认为None :return: 包含所有iframe元素的列表 """ if iframe_list is None: iframe_list = [] # 查找当前页面下所有的iframe元素 iframes = driver.find_elements("tag name", "iframe") for iframe in iframes: iframe_list.append(iframe) # 切换到当前iframe driver.switch_to.frame(iframe) print(iframe.id) e = driver.find_elements(By.ID, 'switcher_plogin') if e is None: # e[0].click() print(f'e={e}') # 递归调用,继续查找当前iframe内部的iframe元素 traverse_iframes(driver, iframe_list) # 切换回父级(上一层),这样才能继续查找同一层级的其他iframe driver.switch_to.parent_frame() return iframe_list # # 配置 ChromeDriver 路径,替换为你的 ChromeDriver 路径,你也可以将chromedriver拖入文件根目录,使用'./chromedriver.exe'路径。 # chrome_driver_path = 'D:/JIAL/JIALConfig/chromedriver/chromedriver.exe' # 替换为你的 ChromeDriver 路径 # # # 初始化 ChromeDriver Service # service = Service(chrome_driver_path) # # 打开浏览器时的相关配置,可以根据需求进行打开和关闭 # options = Options() # options.add_argument("--start-maximized") # 启动时最大化窗口 # # options.add_argument("--disable-blink-features=AutomationControlled") # 使浏览器不显示自动化控制的信息 # # options.add_argument("--disable-gpu") # 禁用GPU硬件加速 # # options.add_argument("--disable-infobars") # 隐藏信息栏 # # options.add_argument("--disable-extensions") # 禁用所有扩展程序 # # options.add_argument("--disable-popup-blocking") # 禁用弹出窗口拦截 # # options.add_argument("--incognito") # 启动无痕模式 # # options.add_argument("--no-sandbox") # 关闭沙盒模式(提高性能) # # options.add_argument("--disable-dev-shm-usage") # 使用/dev/shm分区以避免共享内存问题 # # options.add_argument("--remote-debugging-port=9222") # 启用远程调试端口 # # 初始化 WebDriver,并传入 ChromeDriver Service driver = webdriver.Chrome() # 打开百度搜索首页 driver.get("https://mail.qq.com/") # # 打印页面标题 print(driver.title) # 延时5秒钟,也就是浏览器打开5秒钟,避免闪退 time.sleep(1) # def find_all_iframes(idriver): # iframes = idriver.find_elements('tag name','iframe') # for index, iframe in enumerate(iframes): # # Your sweet business logic applied to iframe goes here. # # print(iframe.id) # driver.switch_to.frame(index) # e = driver.find_elements(By.ID, 'switcher_plogin') # print(e) # find_all_iframes(idriver) # driver.switch_to.parent_frame() # find_all_iframes(driver) all_iframes = traverse_iframes(driver) # print(all_iframes) # print(driver.page_source) # driver.find_element_by_id('j_username').send_keys('***') # e=driver.find_element('class name','switcher_plogin') # driver.switch_to.frame('ptlogin_iframe') # e=driver.find_elements('tag name','iframe') # # e=driver.find_element(By.ID,'switcher_plogin') # print(e) # # driver.switch_to.frame(1) # e=driver.find_elements('tag name','iframe') # # e=driver.find_element(By.ID,'switcher_plogin') # print(e) time.sleep(1) # 关闭 WebDriver driver.quit()