Я написал сценарий Python 3, который использует Selenium для извлечения данных из таблицы в IFrame из Rooster Resource. Эта таблица содержит график MLB на 2018 год.
Однако, когда сценарий выполняется, я получаю следующую ошибку:
selenium.common.exceptions.TimeoutException:
когда он достигает строки, содержащей 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
driver = webdriver.Chrome()
driver.get("link above")
wait = WebDriverWait(driver, 10)
wait.until(EC.frame_to_be_available_and_switch_to_it(wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR, "iframe#pageswitcher-content")))))
for items in wait.until(EC.presence_of_all_elements_located((By.CSS_SELECTOR, "table.waffle tr"))):
data = [item.text for item in items.find_element_by_css_selector("td")]
print(data)
driver.quit()
Btw, Если вы просматриваете приведенную выше ссылку, вы можете увидеть таблицу, содержащую различные красочные логотипы и тексты
FYI, я не хочу повторно использовать ссылку внутри этого iframe; скорее, я хочу переключиться на него, чтобы получить данные.
Есть два вложенных iframes на этой странице для доступа к контенту. Попробуйте это вместо этого:
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
driver = webdriver.Chrome()
driver.get("above link")
wait = WebDriverWait(driver, 10)
wait.until(EC.frame_to_be_available_and_switch_to_it(wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR, "iframe")))))
wait.until(EC.frame_to_be_available_and_switch_to_it(wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR, "iframe#pageswitcher-content")))))
for items in wait.until(EC.presence_of_all_elements_located((By.CSS_SELECTOR, "table.waffle tr"))):
data = [item.text for item in items.find_elements_by_css_selector("td")]
print(data)
driver.quit()