Python Selenium-等到表单提交后加载下一页

2024-10-01 02:35:42 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用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 )

这是工作的大部分时间,但有时网页需要超过5秒加载,我得到旧的网址,因为新的一个还没有加载。

我该怎么做?


Tags: sendurl表单gettimeseleniumsleepcurrent
3条回答

在我的代码中,我创建了一个上下文管理器,它执行以下操作:

  • 获取对“html”元素的引用
  • 提交表格
  • 等到对html元素的引用过时(这意味着页面已开始重新加载)
  • 等待document.readyState完成(这意味着页面已完成初始加载)

如果页面中的内容填充了额外的ajax调用,我可以在这之后再添加一个等待,等待一个我知道在上述四个步骤之后不会立即出现的元素。

有关详细说明,请参阅此博客文章:How to get Selenium to wait for page load after a click

尝试以下方法:

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 )

这将允许您在表单提交后最多等待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 )

来自expected_conditionsurl_changes帮助程序正是为了这个目的:

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)

相关问题 更多 >