fig*_*r20 8 python selenium selenium-webdriver
我使用Python3和Selenium firefox提交表单,然后获取他们随后登陆的URL.我是这样做的
inputElement.send_keys(postnumber)
inputElement.submit()
time.sleep(5)
# Get Current URL
current_url = driver.current_url
print ( " URL : %s" % current_url )
Run Code Online (Sandbox Code Playgroud)
这大部分时间都在工作,但有时页面加载时间超过5秒,我得到旧URL,因为新的URL还没有加载.
我该怎么做?
在我的代码中,我创建了一个上下文管理器,它执行以下操作:
html元素的引用变得陈旧(这意味着页面已经开始重新加载)document.readyState"完成"(这意味着页面已完成初始加载)如果页面中包含使用其他ajax调用填充的内容,我可能会在此之后添加另一个等待的元素,我知道在上述四个步骤之后不会立即显示该元素.
有关详细说明,请参阅此博客文章:如何让Selenium在单击后等待页面加载
url_changes的帮助者expected_conditions正是出于此目的:
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
# some work on current page, code omitted
# save current page url
current_url = driver.current_url
# initiate page transition, e.g.:
input_element.send_keys(post_number)
input_element.submit()
# wait for URL to change with 15 seconds timeout
WebDriverWait(driver, 15).until(EC.url_changes(current_url))
# print new URL
new_url = driver.current_url
print(new_url)
Run Code Online (Sandbox Code Playgroud)
尝试以下方法:
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait as wait
from selenium.webdriver.support import expected_conditions as EC
title = driver.title
inputElement.send_keys(postnumber)
inputElement.submit()
wait(driver, 15).until_not(EC.title_is(title))
current_url = driver.current_url
print ( " URL : %s" % current_url )
Run Code Online (Sandbox Code Playgroud)
这将允许您在提交表单后最多等待 15 秒,直到页面标题发生更改(以防新旧页面上有不同的标题URL) 。如果您想处理新页面上的元素,那么您可能需要使用以下代码:
inputElement.send_keys(postnumber)
inputElement.submit()
text_of_element_on_new_page = wait(driver, 15).until(EC.presence_of_element_located((By.ID, "some_element_id"))).text
print ( " Text of element is : %s" % text_of_element_on_new_page )
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11155 次 |
| 最近记录: |