【发布时间】:2019-11-29 04:58:13
【问题描述】:
我正在使用 selenium 登录网页并在登录后截取屏幕截图。这是我的代码:
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()
当我这样做时,我得到的是登录页面的屏幕截图,而不是下一页。
理想的预期输出应该是页面的屏幕截图,登录后。 我已经通过监控 selenium 打开网页、登录、 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:
我已经检查了第二页,并且 id 存在那里。 我相信发生的事情是 selenium 仍在尝试搜索加载页面上的元素。
我通过监控另一个页面手动验证,它在两秒钟内打开。
编辑:
Html 代码出现在第二页,我正在按 id 搜索:
<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")))行 -
@Andersson 已编辑问题。
-
@avinash 使用您标识为
(By.ID, "crnum")的元素的HTML 更新问题 -
@avinash
wait = WebDriverWait(driver, 10)不是等待页面加载。这条线实际上什么都不做 -
@Andersson 然后我如何等待下一页加载。
标签: python selenium selenium-webdriver screenshot webdriverwait