test_web_auto.py 3.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. #
  2. from selenium import webdriver
  3. from selenium.webdriver.chrome.service import Service
  4. from selenium.webdriver.chrome.options import Options
  5. from selenium.webdriver.common.by import By
  6. from selenium.webdriver.support.ui import WebDriverWait
  7. from selenium.webdriver.support import expected_conditions as EC
  8. import time
  9. def traverse_iframes(driver, iframe_list=None):
  10. """
  11. 递归遍历网页中的所有iframe
  12. :param driver: Selenium的WebDriver实例
  13. :param iframe_list: 用于存储已遍历的iframe元素的列表,默认为None
  14. :return: 包含所有iframe元素的列表
  15. """
  16. if iframe_list is None:
  17. iframe_list = []
  18. # 查找当前页面下所有的iframe元素
  19. iframes = driver.find_elements("tag name", "iframe")
  20. for iframe in iframes:
  21. iframe_list.append(iframe)
  22. # 切换到当前iframe
  23. driver.switch_to.frame(iframe)
  24. print(iframe.id)
  25. e = driver.find_elements(By.ID, 'switcher_plogin')
  26. if e is None:
  27. # e[0].click()
  28. print(f'e={e}')
  29. # 递归调用,继续查找当前iframe内部的iframe元素
  30. traverse_iframes(driver, iframe_list)
  31. # 切换回父级(上一层),这样才能继续查找同一层级的其他iframe
  32. driver.switch_to.parent_frame()
  33. return iframe_list
  34. # # 配置 ChromeDriver 路径,替换为你的 ChromeDriver 路径,你也可以将chromedriver拖入文件根目录,使用'./chromedriver.exe'路径。
  35. # chrome_driver_path = 'D:/JIAL/JIALConfig/chromedriver/chromedriver.exe' # 替换为你的 ChromeDriver 路径
  36. #
  37. # # 初始化 ChromeDriver Service
  38. # service = Service(chrome_driver_path)
  39. # # 打开浏览器时的相关配置,可以根据需求进行打开和关闭
  40. # options = Options()
  41. # options.add_argument("--start-maximized") # 启动时最大化窗口
  42. # # options.add_argument("--disable-blink-features=AutomationControlled") # 使浏览器不显示自动化控制的信息
  43. # # options.add_argument("--disable-gpu") # 禁用GPU硬件加速
  44. # # options.add_argument("--disable-infobars") # 隐藏信息栏
  45. # # options.add_argument("--disable-extensions") # 禁用所有扩展程序
  46. # # options.add_argument("--disable-popup-blocking") # 禁用弹出窗口拦截
  47. # # options.add_argument("--incognito") # 启动无痕模式
  48. # # options.add_argument("--no-sandbox") # 关闭沙盒模式(提高性能)
  49. # # options.add_argument("--disable-dev-shm-usage") # 使用/dev/shm分区以避免共享内存问题
  50. # # options.add_argument("--remote-debugging-port=9222") # 启用远程调试端口
  51. # # 初始化 WebDriver,并传入 ChromeDriver Service
  52. driver = webdriver.Chrome()
  53. # 打开百度搜索首页
  54. driver.get("https://mail.qq.com/")
  55. #
  56. # 打印页面标题
  57. print(driver.title)
  58. # 延时5秒钟,也就是浏览器打开5秒钟,避免闪退
  59. time.sleep(1)
  60. # def find_all_iframes(idriver):
  61. # iframes = idriver.find_elements('tag name','iframe')
  62. # for index, iframe in enumerate(iframes):
  63. # # Your sweet business logic applied to iframe goes here.
  64. # # print(iframe.id)
  65. # driver.switch_to.frame(index)
  66. # e = driver.find_elements(By.ID, 'switcher_plogin')
  67. # print(e)
  68. # find_all_iframes(idriver)
  69. # driver.switch_to.parent_frame()
  70. # find_all_iframes(driver)
  71. all_iframes = traverse_iframes(driver)
  72. # print(all_iframes)
  73. # print(driver.page_source)
  74. # driver.find_element_by_id('j_username').send_keys('***')
  75. # e=driver.find_element('class name','switcher_plogin')
  76. # driver.switch_to.frame('ptlogin_iframe')
  77. # e=driver.find_elements('tag name','iframe')
  78. # # e=driver.find_element(By.ID,'switcher_plogin')
  79. # print(e)
  80. #
  81. # driver.switch_to.frame(1)
  82. # e=driver.find_elements('tag name','iframe')
  83. # # e=driver.find_element(By.ID,'switcher_plogin')
  84. # print(e)
  85. time.sleep(1)
  86. # 关闭 WebDriver
  87. driver.quit()