获取在 Python 中使用 Javascript 生成的页面

Posted

技术标签:

【中文标题】获取在 Python 中使用 Javascript 生成的页面【英文标题】:Get page generated with Javascript in Python 【发布时间】:2012-02-16 03:11:17 【问题描述】:

我想下载javascript 生成的网页并将其存储到Python 代码中的字符串变量中。单击按钮时会生成页面。

如果我知道生成的 URL,我会使用 urllib2,但事实并非如此。

谢谢

【问题讨论】:

这是完全在 js 中生成的还是只是从 ajax 调用构建的? @e-satis 我觉得完全在js里 然后我得到了 J.F 解决方案,或者 python webkit。请记住,它们需要一个显示服务器才能运行,所以如果你打算让它在无头服务器上运行,你需要稍微修改一下。 【参考方案1】:

你可以使用Selenium Webdriver:

#!/usr/bin/env python
from contextlib import closing
from selenium.webdriver import Firefox # pip install selenium
from selenium.webdriver.support.ui import WebDriverWait

# use firefox to get page with javascript generated content
with closing(Firefox()) as browser:
     browser.get(url)
     button = browser.find_element_by_name('button')
     button.click()
     # wait for the page to load
     WebDriverWait(browser, timeout=10).until(
         lambda x: x.find_element_by_id('someId_that_must_be_on_new_page'))
     # store it to string variable
     page_source = browser.page_source
print(page_source)

【讨论】:

是否需要WebDriverWaitsomeId_that_must_be_on_new_page?是否只能使用某些sleepdelay 函数来完成?是否可以设置用户代理字符串? 还有一个问题。在网页上是select 元素,必须选择一些东西。如果未选择任何内容,则该按钮将不起作用。并且有必要打开和关闭firefox吗?没有guit,这行不通? 你可以使用任何你喜欢的条件,例如x.title == 'New Title'。您可能可以通过使用适当的 firefox 配置文件来修改用户代理。 这是一个关于如何select option 的示例。 .quit() 不是必需的。 方法select_option(self, selector, value)采用selector参数。我不确定这个参数应该是什么。假设我想单击带有selectvalue = 100id = 'sel_id'name = 'sel_name' 的选项。这可以用CSS 表达吗?

以上是关于获取在 Python 中使用 Javascript 生成的页面的主要内容,如果未能解决你的问题,请参考以下文章

在像python time.time()这样的javascript中获取时间[重复]

在 javascript 中使用 python 输出

如何使用 Selenium/Python 获取由 JavaScript 编写的 html 内容 [重复]

使用 Python 或 JavaScript 获取到 WhatsApp 的 websocket 连接?

如何使用 BeautifulSoup 和 Python 调用 JavaScript 函数

在 Selenium 中获取 Javascript 代码的返回值