当前位置: 首页 > 知识库问答 >
问题:

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

巫马善
2023-03-14

我使用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秒,我会得到旧的URL,因为新的URL还没有加载。

我应该怎么做?

共有3个答案

琴修为
2023-03-14

尝试以下方法:

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 )
程枫
2023-03-14

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

  • 获取对“html”元素的引用。
  • 提交表格。
  • 等待对html元素的引用失效(这意味着页面已开始重新加载)。
  • 等待<code>文档。readyState为“完成”(表示页面已完成初始加载)

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

有关详细描述,请参阅此博客文章:如何让硒在点击后等待页面加载

金秦斩
2023-03-14

expected_conditions url_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)
 类似资料:
  • 我有一个Selenium测试,在测试中,我点击了一个表单中的submit按钮,如下所示: 接下来,我通过再次调用相同的url手动刷新页面,如下所示: 顺便说一下,webDriver的类型是< code>RemoteWebDriver。接下来,我将测试一些web元素,例如它们是否存在。本地一切正常。在gitlab Pipleine上没有。在管道上,只有当我添加< code>Thread.sleep(

  • 当我运行以下代码时,执行会突然结束,除非我取消对Thread.sleep()的注释。因此,我在撤回url servlet中的代码不会被执行。单击是一个提交按钮单击,加载另一个页面。 让硒等到页面加载的正确方法是什么? 我正在使用以下selenium版本

  • 我正在尝试使用selenium/python从印度中央污染控制委员会读取数据表。这是一个输出示例。我基本上遵循此处介绍的方法:https://github.com/RachitKamdar/Python-Scraper. 多亏了@Prophet,我才能够从第一页读取数据(使用Python的XPATH选择元素?)但我无法让selenium在切换到第2页时等待数据表重新加载。我试图添加webdrive

  • 这是我的servlet的doPost方法,理论上它在db中添加数据 这里是在db中插入数据的方法 但是,当我尝试使用servlet执行此操作时,出现了以下错误 错误1205(HY000):超出锁定等待超时; 有人知道如何解决?如果我对一个普通的java类做同样的事情,那么一切都很好。

  • 下面是MultistepForm的代码。我已经实现了一个多步骤表单功能,所以这里一切都很好,只是问题是在这个表单中,我在最后一步有一个预览页面,所以当我点击提交按钮时,表单正在消失,按钮正在顶部移动。所以如果有人能帮我请。

  • 问题内容: 有人知道如何等待页面加载吗?我尝试了在网上找到的所有可能的变体,但根本无法正常工作。 触发click()命令后,我需要等待,Web服务器上存在一些内部脚本,这些脚本会愚弄检查,例如(我排除了导入所需模块并使用标准命名约定的代码): 要么 要么 上述所有检查均无效,从某种意义上来说,即使页面仍在加载中,它们也会返回True。这会导致我正在阅读的文本不完整,因为click()命令后页面未完