обработка кадров с селеном в python - PullRequest
0 голосов
/ 10 апреля 2020

Я новичок в использовании селена, и в настоящее время я пытаюсь собрать некоторые данные, которые находятся за логином и внутри фрейма (html внизу). Данные, которые я хочу собрать, находятся внутри части кода «# document», может кто-нибудь объяснить, как go получить их?

Мне не ясно, находится ли она внутри "MembersHostFrame" или нет?

Нужно ли использовать этот код -

driver.switch_to.default_content()
driver.switch_to.frame("MembersHostFrame")

code

Ответы [ 3 ]

1 голос
/ 10 апреля 2020

Вы можете использовать приведенный ниже код для включения в фрейм.

iframe=driver.find_element_by_id("MemberHostFrame")
driver.switch_to.frame(iframe)

Вы можете использовать приведенный ниже код для возврата в главное окно:

driver.switch_to.default_content()

Обновлен раздел для ожидания рамка присутствия:

wait = WebDriverWait(driver, 20)
wait.until(EC.presence_of_element_located((By.ID, "MemberHostFrame")))

Примечание :: :: Пожалуйста, добавьте ниже импорта в ваше решение

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

Рабочий код:

from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.support.ui import WebDriverWait
from selenium import webdriver
driver = webdriver.Chrome(executable_path=r"path for chromedriver.exe")
driver.maximize_window()
wait = WebDriverWait(driver, 10)
driver.get("https://members.bet365.com/members/services/host?Microsite=Members&MrsReq=True&DisplayMode=Desktop&prdid=1&platform=1&lng=1&mh=2&ptqs=%2Fhe%2FAuthenticated%2FHistory%2FDisplay%2F%3Frt%3D2%26ht%3D4")

WebDriverWait(driver, 30).until(
                EC.presence_of_all_elements_located((By.ID, "MembersHostFrame")))
iframe=driver.find_element_by_tag_name("iframe")
driver.switch_to.frame(iframe)
wait.until(EC.element_to_be_clickable((By.NAME, "ctl00$Main$login$UserName"))).send_keys("Example123")

Выход:

enter image description here

0 голосов
/ 10 апреля 2020

Чтобы получить доступ к элементу внутри iframe, вам сначала нужно переключиться на iframe.

Индуцируйте WebDriverWait () и ждите frame_to_be_available_and_switch_to_it () и используйте любой из следующих селекторов ID, Name, Xpath или css.

ID:

WebDriverWait(driver,10).until(EC.frame_to_be_available_and_switch_to_it((By.ID,"MembersHostFrame")))

Имя:

WebDriverWait(driver,10).until(EC.frame_to_be_available_and_switch_to_it((By.NAME,"MembersHostFrame")))

Xpath :

WebDriverWait(driver,10).until(EC.frame_to_be_available_and_switch_to_it((By.XPATH,"//iframe[@id='MembersHostFrame']")))

Css Селектор:

WebDriverWait(driver,10).until(EC.frame_to_be_available_and_switch_to_it((By.CSS_SELECTOR,"#MembersHostFrame")))

Вам необходимо импортировать следующие библиотеки.

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
0 голосов
/ 10 апреля 2020

Я думаю, что это должно ответить на ваш вопрос. Выберите iframe, используя Python + Selenium

Вам нужно переключиться в iframe, а затем найти элемент. Ваше предположение верно. Основываясь на комментарии в предоставленной ссылке, вам может понадобиться использовать xpath для получения данных из iframe.

...