【问题标题】:Selenium Python: How to wait for a page to load after a click?Selenium Python:单击后如何等待页面加载?
【发布时间】:2016-10-13 17:40:18
【问题描述】:

我想在点击后获取页面的页面源。然后使用 browser.back() 函数返回。但是 Selenium 不会让页面在点击后完全加载,并且由 JavaScript 生成的内容不会包含在该页面的页面源中。

element[i].click()
#Need to wait here until the content is fully generated by JS.
#And then grab the page source.
scoreCardHTML  = browser.page_source
browser.back()

【问题讨论】:

标签: python selenium


【解决方案1】:

正如 Alan 提到的 - 您可以等待某些元素被加载。下面是示例代码

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

browser = webdriver.Firefox()
element = WebDriverWait(browser, 10).until(EC.presence_of_element_located((By.ID, "element_id")))

【讨论】:

  • 我也可以通过类名等待元素的存在吗? 'By.CLASS_NAME'... 是处理类名的正确语法吗?
  • @abhanan93 你可以等待任何你可以用来查找元素的东西。
  • 如果您希望该类有更多元素,您可以改用presence_of_all_elements_located
  • 我在使用显式等待时遇到此错误消息,即使页面现在已完全加载并且我已完全获取 HTML。 TimeoutException:消息:Stacktrace:在 FirefoxDriver.prototype.findElementInternal_ (file:///tmp/tmpQIQukJ/extensions/fxdriver@googlecode.com/components/driver-component.js:10770)
  • 如果太长,你能把你的整个代码贴在这里吗?
【解决方案2】:

你也可以使用 seleniums staleness_of

from selenium.webdriver.support.expected_conditions import staleness_of

def wait_for_page_load(browser, timeout=30):
    old_page = browser.find_element_by_tag_name('html')
    yield
    WebDriverWait(browser, timeout).until(
        staleness_of(old_page)
    )

【讨论】:

  • 收益声明是怎么回事?
【解决方案3】:

您可以使用这种循环尝试和等待的方法来做到这一点,这是一种易于实现的方法

from selenium import webdriver
browser = webdriver.Firefox()
browser.get("url")
Button=''
while not Button:
    try:
        Button=browser.find_element_by_name('NAME OF ELEMENT')
        Button.click()
    except:continue

【讨论】:

  • 无限循环很少是答案。
【解决方案4】:

假设“pass”是当前页面中的一个元素,不会出现在目标页面中。 我主要使用我要点击的链接的 ID。因为它很少出现在目标页面上。

while True:
  try:
    browser.find_element_by_id("pass")
  except:
    break

【讨论】:

    猜你喜欢
    • 2017-03-27
    • 1970-01-01
    • 2011-07-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多