Selenium Python: Отправка ключей в iframe

#python #html #selenium #iframe

Вопрос:

В настоящее время я студент, пытающийся научиться создавать бота. Я сам успешно просматривал веб-сайт, пока мне не понадобилось отправить ключи в iframe. Я попытался сделать следующее, чтобы получить исключение NoSuchElementException.

 #imports from the beginning
from selenium import webdriver as wd
from selenium.common.exceptions import NoSuchElementException
import chromedriver_binary

iframe = wd.find_element_by_xpath('//*[@id="card-number-container"]/iframe')
wd.switch_to.frame(iframe)

num = wd.find_element_by_xpath('//*[@id="card-number-container"]')
type(num)
num.send_keys("867-5309")
 

Я попытался переключиться на iframe, чтобы взаимодействовать с ним. Ошибка возникает при определении num, но я понятия не имею, что еще нужно добавить, чтобы добраться туда. Вот некоторые HTML-файлы с веб-сайта.

 <div id="card-number-container" class="_3lT_PetJ2w_rU8njR_SoIK _1ysVkT9CIcv98OnRX5h1Rj flex-microform">
     <iframe hspace="0" vspace="0" frameborder="0" scrolling="no" allowtransparency="true" marginwidth="0" marginheight="0" src="https://flex.cybersource.com/cybersource/assets/microform/0.11.4/iframe.html?keyId=03eSdEAPS81iBTM0NCSfE2l3z43E8yw1#{"microformId":"cca792b9-2c83-422c-875b-bdb03b080eee","fieldId":"914ffbab-2597-40e3-9cd0-b5098cea829f","jwt":"eyJraWQiOiJ3ZiIsImFsZyI6IlJTMjU2In0.eyJmbHgiOnsicGF0aCI6Ii9mbGV4L3YyL3Rva2VucyIsImRhdGEiOiI5SGorT1h6Z3lWc2xIc0FxVjE3bEJSQUFFQjJZU1VaQzJjY0dLK0xFWndOVEtMRXhkTGVLS3NSZFRVQjZEODdGWEFTcHM2a3RPTWIwbUNiWTBDZUlOYVE5eTVJSEd4TVgzb2Ziby9keGZCZGVvaFhpRHl1V2tlQXRpZlFneXpXR21KaDUiLCJvcmlnaW4iOiJodHRwczovL2ZsZXguY3liZXJzb3VyY2UuY29tIiwiandrIjp7Imt0eSI6IlJTQSIsImUiOiJBUUFCIiwidXNlIjoiZW5jIiwibiI6ImlHbEJXdmlVVmlzTHpvZ0d1S0VNSDdjNVNtQVQxenYybXh0bExNU1k2a05XaUNQWW1RYW5BS2xRemp5MjN1NzlROG5SZk56aW50a3JWR1hhYk8ycndOQTRaYTBTdXp0ODVhU2steDdNSU9PSDVrQkRpeEJGWmc0dXQ2RDhZRHhHUW5uR25BZEZGZHF5Umx4VnhiZU53WUFxOHpxZFJ1UG9VckY0ZDYxZGFwejJ6ZFU1Z2QyZWFLZXEwQTdCTE9CdjhTbThLU1R6bDY3VndKNmJvX0VLM3FsUldBd3NiLXRSMFIzV0xZTFBDb2lVcThMeUNkVWpjSG84ckQtaGw1VzZ3ekkxR0x3S21RRVN3d0ZLdmZDSmwzTWs1TFQ0NU1WUmtHX1ViNlFBMkZwaDNKOXhGNkY2clNVM2Y0WnVFNlpEQnlIeXZGekVpdlJYMURjWVFxblpuUSIsImtpZCI6IjAzZVNkRUFQUzgxaUJUTTBOQ1NmRTJsM3o0M0U4eXcxIn19LCJjdHgiOlt7ImRhdGEiOnsidGFyZ2V0T3JpZ2lucyI6WyJodHRwczovL3d3dy5wb2tlbW9uY2VudGVyLmNvbSIsImh0dHBzOi8vdGVzdC5wb2tlbW9uY2VudGVyLmNvbSIsImh0dHA6Ly9sb2NhbGhvc3Q6MzAwMCJdLCJtZk9yaWdpbiI6Imh0dHBzOi8vZmxleC5jeWJlcnNvdXJjZS5jb20ifSwidHlwZSI6Im1mLTAuMTEuMCJ9XSwiaXNzIjoiRmxleCBBUEkiLCJleHAiOjE2MzQyNDg5OTIsImlhdCI6MTYzNDI0ODA5MiwianRpIjoiYWF6VWc3QThadXJXZG8yZyJ9.BsUePIvHdd5gkjdKMQ2iaBxyiakGWK9fe0bZNdaCheKfThTqG2HvsipskZ6ec42mira64uEFoCR43qGT7NIoGnGy-CmZ5pYWeuM8yzULD6pSPYhN42afQN08Mht9KjeKSL7W-NlTqT_a3KPadYsm2PIAACDj3hRhVWf0A0Avkd88EN0Yuch47KiVBVJb4QtVONcIVum0rIvr5msnj2zaJyC6WvHhiUu8UutOHqeoqHT3pxdcQNoW6xai6yQjK38yUAVcfKhZpcSnlC-be5FYK38eYSjlAp0XgFSAi6_nllsAs8oj9OoB-A57HpBRyNS0QFVLSt3bmoQky2HMr8gGGg","microformConfig":{"styles":{"input":{"font-size":"12px"},":disabled":{"cursor":"not-allowed"},"valid":{"color":"#43a047"},"invalid":{"color":"#d32f2f"}}},"config":{"placeholder":"Card Number..."},"fieldType":"number"}" style="overflow: hidden; position: relative; border: none; width: 100%; height: 100%;" cd_frame_id_="e0aaadb108c0aacce0bb0c878467c1c7"></iframe>
</div>
 

Комментарии:

1. Iframe-это просто ссылка на другую страницу. Вы пробовали перейти по адресу flex.cybersource …? Я думаю, что вы должны отправить ключи к точному элементу в форме.

2. Как только вы сосредоточитесь на iframe, веб-драйвер больше не сможет видеть указанный выше div. Отсюда исключение NoSuchElementException

3. @BenAlan Я попытался поискать по адресу. Я почти ничего не смог найти. Похоже, это микроформа cybersource flex. Это все, что я выяснил до сих пор. Я добавил весь адрес в исходное сообщение.

4. Когда вы перешли в ifram, вы должны найти XPath поля ввода, в которое вы хотите отправить ключи. num = wd.find_element_by_xpath("//input[.='<some filters>']")