【问题标题】:execute JS code on page from Python从 Python 在页面上执行 JS 代码
【发布时间】:2017-10-16 01:01:49
【问题描述】:

我的任务是使用 Python 从任何网页获取命名函数的列表。

我有一个使用 JavaScript 编写的脚本。它可以满足我的需要。

加载页面后,我可以从 JS 控制台运行脚本(例如,从 GoogleChrome 中的开发工具)。结果是函数名称的数组。好吧,但是我转到页面并手动从浏览器执行脚本。但问题是从 Python 中做同样的事情。它可能看起来像这样:

def get_named_functions_list(url):
    myscript = settings.get_js_code()  # here I get script that I told above

    tool.open(url)

    while not tool.document.READY: # here I wait while the page will completely loaded
        pass

    js_result = tool.execute_from_console(myscript)

    return list(js_result.values())

那么,Python 中有没有工具可以帮助自动解决问题?

更新: 为了更清楚,我可以将任务划分为子任务列表(在 Python 中):

  1. 对给定 url 的请求
  2. 等待 document.ready(function...) 将完成。
  3. 执行我的 JS 代码(如在浏览器中)。
  4. 获取 JS 代码返回的结果。

【问题讨论】:

  • 您的问题不清楚。可能你需要报废
  • 对于这个任务,您可能需要使用HTML parserJavaScript parser
  • @binu.py,我已经更新了主题,使其更加清晰。也许会有所帮助。至于报废,我不需要从页面获取数据。关键任务是在浏览器范围内执行 JS。我认为,它应该像一个简单的 python 非 GUI 浏览器或类似的东西。
  • 如果你想在后端做,我认为这是不可能的。如果您想在加载时执行某些功能,您可能需要检查您正在使用的模板语言。如果这是用于测试,您将需要 python selenium 来完成您的任务
  • @binu.py,例如,我有google.comfacebook 用于检查。我想获取有关域使用的命名 JS 函数的信息。所以,我运行我的脚本,它向上面的 url 发出请求,并给了我两个字符串列表。每个列表都包含 JS 范围内可用的函数名称。

标签: javascript python python-3.x


【解决方案1】:

我已经解决了使用selenium的问题。

然后我下载了 PhantomJS 驱动程序以在没有浏览器窗口的情况下使用 selenium,并将其添加到 PATH。

最后,我使用以下 Python 脚本:

from selenium import webdriver
    
myscript = settings.get_js_code() # here I get content of *.js file
driver = webdriver.PhantomJS()
driver.get(url)
result = driver.execute_script(myscript)
driver.quit()

注意:你的脚本必须返回一些东西才能得到结果。

【讨论】:

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