我试图抓取一个体育统计网站,并意识到所有重要数据都在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在其中找不到任何信息。
尝试这样使用:
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()