очищение таблицы данных iframe, вставленной с использованием JavaScript - PullRequest
0 голосов
/ 27 сентября 2019

Попытка очистить сайт, где таблица данных находится в iframe, который загружается динамически.URL-адрес никогда не меняется, и я использовал селен, чтобы перейти к таблице.Но, находясь там, он все равно не находит фрейм с идентификатором «theiframe».Я вижу iframe с использованием элемента inspect, но когда я использовал свой скрипт, он не находит его.

Я попытался выполнить очистку, настроив iframe с помощью xpath (("//iframe[@id='theiframe']") и с помощью селектора css ("theiframe").По-прежнему получаю сообщение о том, что не может найти элемент

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import Select
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.action_chains import ActionChains
import time

myURL = "http://www.1line.williams.com/Transco/index.html"

driver = webdriver.Firefox()

driver.get(myURL)
time.sleep(3)

action = ActionChains(driver)
step1 = 
driver.find_element_by_xpath('//div[4]/ul[1]/li[5]/a[1]')
action.move_to_element(step1).perform()
print("got to notice...waiting for menu")
time.sleep(1)
step2 = driver.find_element_by_xpath("//div[4]/ul[1]/li[5]/ul[1]/li[1]/a[1]")
action.move_to_element(step2).perform()
step2.click()

time.sleep(4)

# page_source = driver.find_element_by_xpath("//iframe[@id='theiframe']")

page_source = driver.find_element_by_id("theiframe")
print(page_source)

1 Ответ

1 голос
/ 27 сентября 2019

На странице присутствует вложенное iframe. Вам необходимо переключиться на оба iframes.

Кадр 1 : ID = 'interiorFrame'

Кадр 2 : ID = 'theiframe'

Индуцировать WebDriverWait и frame_to_be_available_and_switch_to_it() для двух кадров.

Попробуйте следующий код.

from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.action_chains import ActionChains
from selenium import webdriver

driver = webdriver.Firefox()
driver.get("http://www.1line.williams.com/Transco/index.html")
action = ActionChains(driver)
step1=WebDriverWait(driver,10).until(EC.element_to_be_clickable((By.XPATH,"//div[4]/ul[1]/li[5]/a[1]")))
action.move_to_element(step1).perform()
step2=WebDriverWait(driver,10).until(EC.element_to_be_clickable((By.XPATH,"//div[4]/ul[1]/li[5]/ul[1]/li[1]/a[1]")))
action.move_to_element(step2).click(step2).perform()
WebDriverWait(driver,20).until(EC.frame_to_be_available_and_switch_to_it((By.ID,'interiorFrame')))
WebDriverWait(driver,10).until(EC.frame_to_be_available_and_switch_to_it((By.ID,'theiframe')))
page_source=driver.page_source
print(page_source)
...