1 ‘‘‘ 2 网易云音乐QQ登录 3 http://music.163.com 4 ‘‘‘ 5 from time import sleep 6 7 from selenium import webdriver 8 9 # 创建webdriver 10 from selenium.webdriver.common.by import By 11 12 driver = webdriver.Chrome() 13 # 访问url 14 driver.get(‘http://music.163.com‘) 15 driver.maximize_window() 16 print(driver.window_handles) 17 # 等待是为了让代码的运行成功率更高 18 sleep(2) 19 # 执行登录流程 20 driver.find_element(‘link text‘, ‘登录‘).click() 21 sleep(1) 22 driver.find_element(‘link text‘, ‘选择其他登录模式‘).click() 23 driver.find_element(‘id‘, ‘j-official-terms‘).click() 24 driver.find_element(‘link text‘, ‘QQ登录‘).click() 25 # 句柄的处理 26 ‘‘‘ 27 在计算机世界中,不同的标签页,是通过不同的字符串来区分。可以理解为id,统一称之为句柄 28 通过selenium操作的标签页,在不切换的情况下,只会一直聚焦在第一个页面。 29 如果要操作新的句柄页,切换句柄就可以了。 30 原则: 31 1. 在selenium自动化时,尽可能保持有,且最多仅有两个页面存在。 32 2. 如果页面会自行关闭,就不需要额外执行close(特定业务) 33 3. 如果自动关闭后,仍需要操作其他页面,则需要切换句柄。 34 ‘‘‘ 35 36 # 切换句柄 37 handles = driver.window_handles # 获取当前所有的句柄 38 # driver.close() # 关闭当前句柄页 39 driver.switch_to.window(handles[1]) # 切换到第二个句柄页 40 print(handles) 41 42 sleep(3) 43 # 操作第二个句柄页 44 # print(driver.title) 45 # driver.find_element(‘link text‘, ‘QQ登录‘).click() 46 # handles = driver.window_handles 47 # print(handles) 48 49 50 ‘‘‘ 51 iframe是一个窗体,内嵌页面,本身是一个独立的html页面存在。本质上是套娃。 52 对于iframe内的元素如果要操作,是没有办法直接定位的。 53 当你如果遇到死活定位不到的元素,就检查一下是不是一个iframe,如果是,则切换iframe后再操作 54 iframe在切换进去之后,就只可以操作iframe中的内容,iframe以外的内容无法操作。如果要操作原窗体内容,需要重新返回默认窗体 55 ‘‘‘ 56 # 切换iframe:有id就直接传入id即可,没有id,就通过元素定位,传递元素进去 57 frame = driver.find_element(‘id‘, ‘ptlogin_iframe‘) 58 driver.switch_to.frame(frame) 59 # 执行QQ快捷登录 60 driver.find_element(‘id‘, ‘img_out_508419907‘).click() 61 sleep(2) 62 # 返回默认窗体。 63 # driver.switch_to.default_content() 64 65 handles = driver.window_handles 66 print(handles) 67 driver.switch_to.window(handles[0]) 68 print(driver.title)