#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. Рад помочь 🙂