【问题标题】:selenium: How to get page source code after clicking a buttonselenium:单击按钮后如何获取页面源代码
【发布时间】:2018-04-23 15:56:24
【问题描述】:

我正在使用 selenium 和 python 来测试我的 Web 服务器。我需要在输入文本中填写文本,然后单击按钮将消息提交到我的服务器并打开一个新网页。

这是我的代码:

from selenium import webdriver
from selenium.webdriver.common.by import By

driver = webdriver.Chrome()
driver.get("http://www.example.com")
txt = driver.find_element_by_id('input-text')
txt.clear()
txt.send_keys('some messages')
btn = driver.find_element_by_id('input-search')
btn.click()
# How to print the source code of the new page here?
# I think it should be as below but I don't know how to do it:
# driver.get("new link")   <---- How to get the new link?
# print(driver.page_source.encode('utf-8'))

当我执行上面的 python 代码时,一切正常:

www.example.com 已打开。
some messages 填写在 input-text.
按钮 input-search 被点击。
新网页 页面已打开。

现在需要打印新网页的页面源代码,点击按钮打开,但是不知道怎么做。

print(driver.page_source.encode('utf-8')) 只是给了我www.example.com 的源代码,而不是新的网页。

【问题讨论】:

    标签: javascript jquery python selenium


    【解决方案1】:

    如果新页面是在新标签页或新窗口中加载的,则需要先将 selenium 的上下文更改为这个新窗口:

    driver.switch_to_window(driver.window_handles[1])

    下一步就是等到新内容加载完毕,然后就可以获取代码了:

    print(driver.page_source.encode('utf-8'))

    【讨论】:

    • 我收到一个错误:IndexError: list index out of range。对不起,我误导你了。点击的动作不是打开另一个新页面,而是用新页面替换旧页面。
    • 那么,您的代码对我来说似乎不错,也许您只需要等到新页面加载完成?
    • 哦...你是对的 :D 但我认为switch_to_window 对其他人有很大帮助。所以我接受你的回答。您可以根据需要重新编辑您的答案。
    【解决方案2】:

    然后您需要等待新页面加载。根据网页的构建方式,您可能必须等待元素出现,然后将页面内容转储到带有 driver.page_source 的变量中。或者,如果您不需要点击按钮即可到达该页面,您可以只使用 driver.get(url) 并在页面加载完成后依靠它完成。

    【讨论】:

      【解决方案3】:

      在打印新网站源代码之前,可以尝试延迟几秒。

      time.sleep(2)
      print(driver.page_source.encode('utf-8'))
      

      这对我有用:D

      【讨论】:

      • 嗨,除了 time.sleep() 还有其他方法吗?谢谢。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-03-27
      • 2021-12-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多