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]

感谢各位大佬
...全文
214 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
geek_puddin 2021-02-03
  • 打赏
  • 举报
回复
我没尝试做点击图像登陆,只是可以逐步进入两个iframe并定位到图像元素
虫无涯 2021-02-03
  • 打赏
  • 举报
回复 1
你源代码中直接使用
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)
果、失 2021-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]')
,这样可以点击图像登录了吗?
geek_puddin 2021-02-03
  • 打赏
  • 举报
回复
我简单试一下我没问题啊

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]')
果、失 2021-02-02
  • 打赏
  • 举报
回复
引用 1 楼 cclxpp123的回复:
可以考虑用cookie登陆, 更简单一些.
我想试一试这样的
cclxpp123 2021-02-02
  • 打赏
  • 举报
回复
可以考虑用cookie登陆, 更简单一些.

37,743

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • WuKongSecurity@BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧