提问者:小点点

PythonSelenium驱动程序。find_element_by_xpath在iframe中找不到元素


我试图抓取一个体育统计网站,并意识到所有重要数据都在iframe中。我使用驱动程序。switch_to. frame()切换到iframe,这不会引发任何错误。

frame1 = '//iframe[@src="reallylongsource"]'


 driver.switch_to.frame(driver.find_element_by_xpath(frame1))

但是当我尝试访问iframe中的信息时,

selenium.common.exceptions.NoSuchElementException: Message: Unable to locate element: .//div[@class="classname"]

被引发。我可以看到元素在超文本标记语言中,但我不能用selenium找到它。我尝试用CSS选择器定位它,但没有成功。

我很确定它也是正确的iframe。我尝试用xpath和标签名称找到它,它们是相同的iframe。

我打印的时候

print(driver.find_element_by_xpath(frame1).text)

我只有空白

我已经把头撞在墙上很长一段时间了,想不明白!

似乎我可以切换到正确的iframe,但是selenium在其中找不到任何信息。


共1个答案

匿名用户

尝试这样使用:

driver = webdriver.Chrome()
driver.get(URL)

driver.implicitly_wait(5)

driver.switch_to.frame(driver.find_element(By.TAG_NAME, 'iframe'))

element = driver.find_element(By.XPATH, '//div[@class="classname"]')

driver.quit()

如果它与您在代码中所做的相同,请提供更多信息以查看页面

试试这个,它会移动到第一种游戏的第一个游戏,并获得所有的分数并打印它:

import time

from selenium import webdriver

driver = webdriver.Chrome()

driver.get('https://campobet.se/en/sport/prelive?sportids=66')
time.sleep(5)

driver.switch_to.frame(
    driver.find_element_by_xpath("//iframe[contains(@src, 'https://sb1client-altenar.biahosted.com')]"))
time.sleep(1)

game_types = driver.find_elements_by_xpath("//div[@name='leagues-selector']")
time.sleep(1)
game_types[0].click()
time.sleep(1)
games = driver.find_elements_by_xpath(
    "//div[@class='_asb_simple-button _asb_simple-button-pointer  _asb_leagues-selector-item ']")
games[0].click()
time.sleep(1)
scores = driver.find_elements_by_xpath("//div[@class='asb-flex-cc asb-unshrink _asb_price-block-content-price ']/span")
time.sleep(1)

scores_values = [el.text for el in scores]
time.sleep(1)
print(scores_values)
driver.quit()