1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495 |
- #
- 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()
|