• 全部
  • 互动交流
  • 文章分享

selenium 定位 iframe

果、失 2021-02-02 08:58:24



我想实现 通过点击 头像来实现登录 但是 我发现一直定位不了 (我知道有两个iframe)

这是我写的代码

[codeimport time
from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver import ChromeOptions
from selenium.webdriver.common.by import By
import selenium.webdriver.support.expected_conditions as EC
from selenium.webdriver.support.ui import WebDriverWait

option = ChromeOptions()
option.add_experimental_option('excludeSwitches', ['enable-automation'])
driver=webdriver.Chrome(options=option)
actions=ActionChains(driver)
#关闭自动化扩展信息
option.add_experimental_option('useAutomationExtension',False)
#屏蔽我是 一个selenium的操作
driver.execute_cdp_cmd('Page.addScriptToEvaluateOnNewDocument',{'source':'Object.defineProperty(navigator,"webdriver",{get:()=>undefined})'})
driver.get('https://y.qq.com/')
driver.maximize_window()

login_tag=driver.find_element_by_xpath('/html/body/div[1]/div/div[2]/span/a[2]')
actions.move_to_element(login_tag)
actions.click(login_tag)
actions.perform()
time.sleep(5)
#这里定位不了 iframe
driver.switch_to.frame('frame_tips')
time.sleep(5)
driver.switch_to.frame('ptlogin_iframe')

log_tag=driver.find_element_by_xpath('/html/body/div[1]/div[4]/div[8]/div/a/span[4]')
print(log_tag)
actions.move_to_element(log_tag)
actions.click(log_tag)
actions.perform()
driver .switch_to.default_content()][/code]

感谢各位大佬
...全文
118 点赞 收藏 6
写回复
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
我没尝试做点击图像登陆,只是可以逐步进入两个iframe并定位到图像元素
回复
你源代码中直接使用
driver.switch_to.frame('frame_tips')
是定位不了的,为啥呢? 1、你要先定位到登录后整个弹窗,然后在弹窗下找这个frame就可以了,把这句改为如下:
driver.switch_to.frame(driver.find_element_by_class_name("popup__bd").find_element_by_id("frame_tips"))
2、你上边所有的代码太臃肿了,我给你改下,点击图像登录全部代码如下,如果可以记得给分哦:
# -*- coding:utf-8 -*-

from selenium import webdriver
import time

driver = webdriver.Chrome()
driver.get("https://y.qq.com/")
time.sleep(1)
driver.maximize_window()

login = driver.find_element_by_link_text("登录")
login.click()
time.sleep(2)

driver.switch_to.frame(driver.find_element_by_class_name("popup__bd").find_element_by_id("frame_tips"))  # 切换frame到登录弹窗
time.sleep(0.5)
driver.switch_to.frame(driver.find_element_by_id("ptlogin_iframe"))  # 切换frame到登录弹窗下的图标登录
driver.find_element_by_xpath("html/body/div[1]/div[4]/div[8]/div/a/span[4]").click()  # 点击qq图标登录
time.sleep(2)
回复
果、失 02-03
引用 3 楼 geek_puddin的回复:
我简单试一下我没问题啊

from selenium import webdriver


driver = webdriver.Chrome()
driver.get('https://y.qq.com/')
driver.maximize_window()
login_tag=driver.find_element_by_xpath('/html/body/div[1]/div/div[2]/span/a[2]')
login_tag.click()
driver.switch_to.frame('frame_tips')
driver.switch_to.frame('ptlogin_iframe')
log_tag=driver.find_element_by_xpath('/html/body/div[1]/div[4]/div[8]/div/a/span[4]')
,这样可以点击图像登录了吗?
回复
我简单试一下我没问题啊

from selenium import webdriver


driver = webdriver.Chrome()
driver.get('https://y.qq.com/')
driver.maximize_window()
login_tag=driver.find_element_by_xpath('/html/body/div[1]/div/div[2]/span/a[2]')
login_tag.click()
driver.switch_to.frame('frame_tips')
driver.switch_to.frame('ptlogin_iframe')
log_tag=driver.find_element_by_xpath('/html/body/div[1]/div[4]/div[8]/div/a/span[4]')
回复
果、失 02-02
引用 1 楼 cclxpp123的回复:
可以考虑用cookie登陆, 更简单一些.
我想试一试这样的
回复
cclxpp123 02-02
可以考虑用cookie登陆, 更简单一些.
回复
相关推荐
发帖
脚本语言
创建于2007-08-27

3.7w+

社区成员

JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
申请成为版主
帖子事件
创建了帖子
2021-02-02 08:58
社区公告

CSDN 脚本语言社区接受专栏投稿(专栏会在顶部创建专属你的栏目),投稿需满足以下要求:

  • 脚本语言技术相关;
  • 文章持续更新,保持活跃;
  • 内容清晰明了,干货为主;
  • 文章排版有序,有条有理。

本社区开通招聘专栏,发布招聘信息请联系版主,发布者需要保证招聘信息真实有效,CSDN 平台和版主不对招聘内容负责!

联系方式:私聊版主、发送邮件、QQ联系等均可: