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

Python Selenium:如何在单击链接之前等待

窦弘义
2023-03-14

我只是想知道,如何在点击链接之前让浏览器等待?我的目标是我从一个动态网页抓取,内容是动态的,但我设法得到表单ID。唯一的问题是提交按钮仅在2-3秒后显示。但是,我的Firefox驱动程序在加载页面(不是动态部分)时立即开始单击链接。

有没有办法让我的浏览器等待2-3秒,直到提交按钮出现?我试图使用time.sleep()但它暂停了一切,提交按钮在time.sleep期间没有出现,而是在time.sleep结束时在2-3秒后出现。

共有2个答案

邢杰
2023-03-14

您需要使用<code>Selenium等待

特别是,element_to_be_clickable预期条件比其他条件更适合:

from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

element = WebDriverWait(driver, 10).until(
    EC.element_to_be_clickable((By.ID, "myDynamicElement"))
)
element.click()

其中< code>driver是您的webdriver实例,10是等待元素的秒数。使用这种设置,selenium将在总共10秒内每500毫秒尝试定位一个元素。如果找不到元素,它将在10秒后抛出< code>TimeoutException。

淳于鹏
2023-03-14

您可以按如下方式设置等待:

显式等待:

    element = WebDriverWait(driver, 20).until(
    EC.presence_of_element_located((By.ID, "myElement"))

隐式等待 :

 driver.implicitly_wait(20) # seconds
 driver.get("Your-URL")
 myElement = driver.find_element_by_id("myElement")

您可以使用上述任何一项。两者都是有效的。

 类似资料:
  • 问题内容: 我只是想知道,如何让浏览器在单击链接之前等待?我的目标是从动态网页抓取内容,内容是动态的,但我设法获取表单ID。唯一的问题是,提交按钮仅在2-3秒后显示。但是,我的Firefox驱动程序在页面加载后立即开始单击链接(不是动态部分)。 有什么办法可以让我的浏览器等待2-3秒,直到出现提交按钮?我尝试使用它,但是它暂停了所有操作,提交按钮在显示期间没有出现,但是在2-3秒后显示。 问题答案

  • 我有一个html链接

  • 问题内容: 假设我的网页上有这些元素。 我想单击带有文本的链接。如何使用 链接文本 来识别或单击该元素,而没有任何独特的属性,例如id或class。 在.Net中,我可以使用。nightwatch.js中的等效项是什么 问题答案: 定位器在内部使用XPath。 因此,使用XPath单击示例中的第二个链接: 请注意,根据内部HTML的不同,您可能需要连接子级并修剪空格:

  • 我在Android上有一个,我希望任何嵌入的URL都可以点击。我使用了类,它将它们变成蓝色并加下划线。然而,我不知道如何让它们真正可以点击。 谢谢!

  • 我有文本文件包含的CSV文件格式的样本,我希望我的用户可以下载一个链接点击该文件。 此文件驻留在此文件夹结构中: 资产- 这是我一直尝试的代码: 此代码在页面加载时下载文件,而不是单击链接。此外,它还下载页面的整个html结构,我只需要我在文本文件中编写的文本。 请问问题出在哪里?

  • 问题内容: 在机械化中,我们可以使用follow_link或click_link单击链接。在美丽的汤中是否有类似的事情可以单击网页上的链接? 问题答案: 是HTML 解析器 。 进一步的讨论实际上取决于您所处的具体情况以及特定网页的复杂性。 如果您需要与网页进行交互:提交表单,单击按钮,滚动等-您需要使用利用真实浏览器的工具,例如。 例如,在某些情况下,如果提交表单时不涉及任何javascript