python写入数据到html并嵌套在iframe_在Selenium中的空iframe但已填入浏览器(python)...

I'm trying to control Spotify's browser player. All of the controls are put inside iframe sections.

Problem: The iframes are EMPTY in the Selenium WebDriver object. Yet, the iframes are filled with the correct content in the ACTUAL browser.

Code sample:

from selenium import webdriver

from selenium.webdriver.common.by import By

from selenium.webdriver.support.ui import WebDriverWait

from selenium.webdriver.support import expected_conditions as ec

import time

username = 'myusername'

base_url = 'https://play.spotify.com/user/spotifydiscover/playlist/76HML2OQXigkyKopqYkeng'

browser = None

def login():

global browser

password = input("Password: ")

browser = webdriver.Firefox()

browser.get(base_url)

browser.find_element_by_id('has-account').click()

browser.find_element_by_id('login-usr').clear()

browser.find_element_by_id('login-usr').send_keys(username)

browser.find_element_by_id('login-pass').clear()

browser.find_element_by_id('login-pass').send_keys(password)

browser.find_element_by_id('login-pass').submit()

def next_track():

global browser

wrapper = browser.find_element_by_id("section-collection")

print(wrapper.get_attribute('innerHTML').encode('utf-8'))

iframe = wrapper.find_element_by_tag_name('iframe')

print(iframe.get_attribute('innerHTML').encode('utf-8'))

sub = browser.switch_to_frame(iframe)

sub.find_element_by_id('next').click()

def test():

login()

time.sleep(14) # Adjusted until page is 100% fully loaded

next_track()

time.sleep(40)

解决方案

The problem is here:

iframe = wrapper.find_element_by_tag_name('iframe')

There are multiple iframes on the page and you are interested in the one with app-player id:

browser.switch_to_frame("app-player")

# now use browser.find_element_* to locate elements inside iframe

Also note that using time.sleep makes your automation code seriously fragile and usually slower than needed - instead use Explicit Waits to wait for the specific conditions to be met on a page.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值