selenium和firefox浏览器,登录icloud,无法切换到登录框的iframe


其登录框iframe的id为 auth-frame

brower.switch_to.frame(0)
# brower.switch_to.frame('auth-frame')
# 都无法切换到这个iframe,无法获取到iframe内部的div。

另外,用selenium和firefox浏览器登录icloud时,复制下已经登录的cookie,如何进行格式化处理,使cookie可以被添加到以后的每一次请求。

            brower = webdriver.Firefox()
            cookie = self.cookie
            brower.add_cookie(cookie) #但是复制下来的cookie格式是不被支持的
回复
阅读 4k
2 个回答

我这里测试是可以切换的

Windows 7 (64 bit)
Python 3.6.2
selenium (3.5.0)
Firefox 55.0.3 (32 位)
geckodriver-v0.19.0-win64

测试代码:

#!/bin/env python
from selenium import webdriver
from selenium.webdriver.common.by import By
import time

driver = webdriver.Firefox()
driver.get("https://www.icloud.com/")
title = driver.title
print(title)

time.sleep(20)
print("time sleep ok")

driver.switch_to.frame(driver.find_element_by_id("auth-frame"))

time.sleep(3)


# 填写邮箱与密码登陆
emailElement = driver.find_element(By.ID, 'appleId')
emailElement.send_keys("123@qq.com")

time.sleep(1)

passwordEmement = driver.find_element(By.ID, 'pwd')
passwordEmement.send_keys("password")

你可能需要等待一段时间,等待 Frame 代码加载完成,如果不想用time这种粗暴的方式可以使用wait.untilEC.presence_of_element_located组合

另一个cookie的问题,cookies是许多键值对的的,你这样试试

# 登陆后获取cookies
cookies = driver.get_cookies()

# 在加载新的页面后倒入Cookies
for cookie in cookies:
    driver.add_cookie(cookie)

另外也可以保存到文件中

# 保存Cookies到文件
import pickle
import selenium.webdriver 

driver = selenium.webdriver.Firefox()
driver.get("http://www.google.com")
pickle.dump( driver.get_cookies() , open("cookies.pkl","wb"))


# 从文件加载Cookies
import pickle
import selenium.webdriver 

driver = selenium.webdriver.Firefox()
driver.get("http://www.google.com")
cookies = pickle.load(open("cookies.pkl", "rb"))
for cookie in cookies:
    driver.add_cookie(cookie)

保存在文件这种适合cookie校验不严格的网站

郁闷的结论,我们学校寝室网络,不给他设置个够长的等待,是不会加载完成的!

推荐问题
宣传栏