selenium — Не удается найти входные данные

#python-3.x #selenium #selenium-webdriver

#python-3.x #selenium #selenium-webdriver

Вопрос:

Пытаюсь создать скрипт, который будет автоматически подписываться на новости, но столкнулся с проблемой, selenium не удается найти ввод электронной почты и кнопку отправки. Каждый раз, получая selenium.common.exceptions.NoSuchElementException:

 from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

chrome_options = Options()
chrome_options.add_argument("--window-size=1920x1080")

path_to_chromedriver = 'chromedriver'
driver = webdriver.Chrome(chrome_options=chrome_options, executable_path=path_to_chromedriver)

driver.get('https://dataengweekly.com/')

driver.find_element_by_tag_name("body").send_keys(Keys.PAGE_DOWN)
email_input = WebDriverWait(driver, 10).until(
    EC.presence_of_element_located((By.CSS_SELECTOR, 'input[type="email"]'))
)

email_input.send_keys("email@test.com")
driver.find_element_by_css_selector('button.subscribe-btn').click()
time.sleep(10)

  

Ответ №1:

Примечание — Текстовое поле вашей подписки находится в другом, iframe для работы с которым iframe вам нужно сначала переключиться на это iframe .

Попробуйте приведенный ниже код и дайте мне знать, если вам нужны дополнительные разъяснения —

 from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver import ActionChains
import time

chrome_options = Options()
chrome_options.add_argument("--window-size=1920x1080")

driver = webdriver.Chrome(options=chrome_options)

wait = WebDriverWait(driver, 5)
action = ActionChains(driver)

driver.get('https://dataengweekly.com/')

iframe = driver.find_element_by_xpath('//iframe')
driver.switch_to.frame(iframe)

email_input = wait.until(EC.presence_of_element_located((By.XPATH, "//input[@type='email']")))
action.move_to_element(email_input).click().send_keys("email@test.com").perform()

driver.find_element_by_css_selector('button.subscribe-btn').click()
time.sleep(2)
  

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

1. iframe Я забыл о них) это работает, спасибо

2. Рад помочь 🙂