Я использую селен, чтобы войти на веб-страницу и сделать снимок экрана после входа в систему. Вот мой код:
import os
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
driver = webdriver.Firefox()
driver.get("some website")
user_name = driver.find_element_by_name("USERNAME")
password = driver.find_element_by_name("PIN")
user_name.clear()
user_name.send_keys("username")
password.clear()
password.send_keys("password)
###Sends enter
password.send_keys(Keys.RETURN)
# Wait for some time for the next page to load
wait = WebDriverWait(driver, 10)
driver.save_screenshot('screenshot.png')
driver.quit()
Когда я это делаю, я получаю скриншот страницы входа вместо следующей страницы.
Ожидаемый результат в идеале должен быть скриншотом страницы, после входа в систему. Я вручную проверил, отслеживая, что селен открывает веб-страницу, входит в систему в течение 10 секунд.
Поэтому я сделал что-то еще, я вставил sleep (10) вместо driver.wait, вот так:
wait = WebDriverWait(driver, 10)
заменено на
os.sleep(10)
При этом я получаю скриншот следующей страницы.
Затем я также попытался вставить пользовательское условие ожидания и искал элемент на следующей странице:
try:
element = WebDriverWait(driver, 100).until(
EC.presence_of_element_located((By.ID, "crnum"))
)
Однако селен выдает следующую ошибку:
TimeoutException Traceback (most recent call last)
<ipython-input-39-16f1ee0dd7f3> in <module>()
15 try:
16 element = WebDriverWait(driver, 100).until(
---> 17 EC.presence_of_element_located((By.ID, "crnum"))
18 )
19 finally:
D:\anaconda\lib\site-packages\selenium\webdriver\support\wait.py in until(self, method, message)
78 if time.time() > end_time:
79 break
---> 80 raise TimeoutException(message, screen, stacktrace)
81
82 def until_not(self, method, message=''):
TimeoutException: Message:
Я проверил вторую страницу, и там существует идентификатор. Я считаю, что происходит то, что селен все еще пытается найти элемент на странице загрузки.
Я вручную проверил, отслеживая другую страницу, и она открывается менее чем за две секунды.
ИЗМЕНИТЬ:
Html-код присутствует на второй странице, я ищу по идентификатору:
<input type="text" id="crnum" name="number" title="Request Number" onfocus="this.className='focusField';" onblur="this.className='';" class="">
element = WebDriverWait(driver, 100).until(EC.presence_of_element_located((By.ID, "crnum")))
в вашем коде - person Andersson   schedule 15.05.2018(By.ID, "crnum")
. - person DebanjanB   schedule 15.05.2018wait = WebDriverWait(driver, 10)
- это не ожидание загрузки страницы. Эта строка на самом деле ничего не делает - person Andersson   schedule 15.05.2018