获取在 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)
【讨论】:
是否需要WebDriverWait
和someId_that_must_be_on_new_page
?是否只能使用某些sleep
或delay
函数来完成?是否可以设置用户代理字符串?
还有一个问题。在网页上是select
元素,必须选择一些东西。如果未选择任何内容,则该按钮将不起作用。并且有必要打开和关闭firefox吗?没有guit
,这行不通?
你可以使用任何你喜欢的条件,例如x.title == 'New Title'
。您可能可以通过使用适当的 firefox 配置文件来修改用户代理。
这是一个关于如何select option 的示例。 .quit()
不是必需的。
方法select_option(self, selector, value)
采用selector
参数。我不确定这个参数应该是什么。假设我想单击带有select
的value = 100
和id = 'sel_id'
和name = 'sel_name'
的选项。这可以用CSS
表达吗?以上是关于获取在 Python 中使用 Javascript 生成的页面的主要内容,如果未能解决你的问题,请参考以下文章
在像python time.time()这样的javascript中获取时间[重复]
如何使用 Selenium/Python 获取由 JavaScript 编写的 html 内容 [重复]
使用 Python 或 JavaScript 获取到 WhatsApp 的 websocket 连接?