gpt4 book ai didi

python - Selenium 中的空 iframe 但已填充浏览器 (python)

转载 作者:行者123 更新时间:2023-12-01 04:12:32 25 4
gpt4 key购买 nike

我正在尝试控制 Spotify 的浏览器播放器。所有控件都放在 iframe 部分内。

问题:Selenium WebDriver 对象中的 iframe 为空。然而,iframe 在实际浏览器中填充了正确的内容。

代码示例:

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)

最佳答案

问题出在这里:

iframe = wrapper.find_element_by_tag_name('iframe')

页面上有多个 iframe,您对 ID 为 app-player 的 iframe 感兴趣:

browser.switch_to_frame("app-player")
# now use browser.find_element_* to locate elements inside iframe

另请注意,使用 time.sleep 会使您的自动化代码严重脆弱,并且通常比需要的速度慢 - 相反,请使用 Explicit Waits等待页面上满足特定条件。

关于python - Selenium 中的空 iframe 但已填充浏览器 (python),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34711187/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com