Проблема в поиске элемента после изменения страницы в Selenium Python - PullRequest
0 голосов
/ 18 февраля 2020

я использую библиотеку веб-скребка в качестве [Selenium] в python. и я хочу отправить форму (множественная форма без AJAX)

, поэтому я написал этот код:

from selenium import webdriver
import time

driver = webdriver.Chrome()
driver.get('https://exportgram.com/')

one = driver.find_element_by_xpath('//*[@id="home"]/form/div[1]/div/input[1]')
one.click()
one.send_keys('https://www.instagram.com/p/B6OCVnTglgz/')
two = driver.find_element_by_xpath('//*[@id="home"]/form/div[2]/button')
two.click()
time.sleep(3)


three = driver.find_element_by_xpath('//*[@id="home"]/form/div[2]/button')
three.click()

сейчас я не могу получить доступ к «три», потому что это доступно на новом page.

нет способа решить эту проблему?

[Примечание: после нажатия на 'two' страница изменилась на 'https://example.com/media.php']

1 Ответ

0 голосов
/ 18 февраля 2020

Если после нажатия на второй элемент он перенаправляет вас на другую страницу, это означает, что эта форма частично отправлена. Вы сможете найти новое дерево DOM, как только браузер загрузит новый адрес, так что вам нужно дождаться его появления.

Вы можете сделать это с помощью этого кода:

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

timeout = 10
three = WebDriverWait(driver, timeout).until(EC.presence_of_element_located((By.XPATH, '//*[@id="home"]/form/div[2]/button')), 'Time out')
three.click()
...