Selenium多表单切换switch_to.frame

捋了捋还有那些需要自动打卡的站点,

结果发现52pojie的qq自动登录,

只用find_element的话找不到代码,

原因是 frame 嵌套页面的应用,

WebDriver 每次只能在一个页面上识别元素。

这个时候就需要通过 switch_to.frame(),

将当前定位的主体切换到 frame 里在定位元素。

  • switch_to.frame() 默认可以直接取表单的 id 或 name 属性进行切换。
#id = "if"
wd.switch_to.frame("if")
#name = "nf"
wd.switch_to.frame("nf")
  • 那么如果 iframe 没有可用的 id 和 name 可以先定位frame
#先通过 xpth 定位到 iframe
xf = wd.find_element_by_xpath('//*[@class="if"]')
#再将定位对象传给 switch_to_frame()方法
wd.switch_to_frame(xf)
wd.switch_to_default_content()
  • 完成了当前表单的操作可通过switch_to.default_content()返回到上一层表单

QQ自动登录实现

def pojie():
    wd.get('https://www.52pojie.cn/index.php')
    # 跳转qq登录界面
    wd.find_element(By.XPATH,'//div[@class="fastlg_fm y"]/p/a').click()
    wd.implicitly_wait(5)
    # 切换到frame
    wd.switch_to.frame('ptlogin_iframe')
    # 定位快捷登录账号
    wd.find_element(By.XPATH,'//div[@id="qlogin_list"]/a').click()
    sleep(5)
    wd.find_element(By.XPATH,'//div[@id="um"]//p[2]/img').click()
    # wd.implicitly_wait(10)
    print('hifini.com签到完成')
pojie()
posted @ 2024-11-25 21:54  Sonoop  阅读(26)  评论(0)    收藏  举报