8wDlpd.png
8wDFp9.png
8wDEOx.png
8wDMfH.png
8wDKte.png

从 Python 执行页面上的 JS 代码

Student_102345 1月前

30 0

我的任务是使用 Python 从任何网页获取命名函数列表。我有一个使用 JavaScript 编写的脚本。它可以满足我的需要。当页面加载时,我可以从 JS 控制台运行脚本...

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

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

页面加载后,我可以从 JS 控制台运行脚本(例如从 GoogleChrome 中的 dev-tools)。我得到了函数名称数组作为结果。好吧,但我转到页面并从浏览器手动执行脚本。但问题是从 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 代码返回的结果。
帖子版权声明 1、本帖标题:从 Python 执行页面上的 JS 代码
    本站网址:http://xjnalaquan.com/
2、本网站的资源部分来源于网络,如有侵权,请联系站长进行删除处理。
3、会员发帖仅代表会员个人观点,并不代表本站赞同其观点和对其真实性负责。
4、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
5、站长邮箱:yeweds@126.com 除非注明,本帖由Student_102345在本站《parsing》版块原创发布, 转载请注明出处!
最新回复 (0)
  • 我已经使用 selenium 库 和 Google Chrome 驱动程序开发了一个功能( PhantomJS 驱动程序 对于最新版本的 selenium 来说已经过时了)。

    以下是代码:

    import time
    
    from selenium import webdriver
    from selenium.webdriver.chrome.service import Service
    from webdriver_manager.chrome import ChromeDriverManager
    
    
    def execute_script_on_url(
            page_url,
            js_script,
            load_wait_time=1,
            script_wait_time=0
    ):
        service = Service(ChromeDriverManager().install())
        options = webdriver.ChromeOptions()
    
        # Stop browser windows to pop up.
        options.add_argument('--headless')
    
        driver = webdriver.Chrome(service=service, options=options)
        try:
            # Open the web page and wait for it to load.
            driver.get(page_url)
            time.sleep(load_wait_time)
    
            # Execute the JS script and wait for it to finish.
            result = driver.execute_script(js_script)
            time.sleep(script_wait_time)
    
            return result
        finally:
            driver.quit()
    

    该函数将page_url和js_script作为文本执行。您可以像这样将文件转换为文本:

    script = open('./the-file-route.js', 'r').read()
    

    然后您可以像这样使用该函数:(例如)

    result = execute_script_on_url('https://www.google.com/', script)
    

    如果脚本返回了某些内容,那么它将被存储在 result 变量中。例如,如果你的 JavaScript 代码如下所示(愚蠢的示例):

    return [1, 2, 3, 4];
    

    然后如果你在 Python 中打印 result

    print(result)
    # Expected output: [1, 2, 3, 4]
    
  • 它仅使用如下方式读取文件内容:open(path) 作为文件:content = file.read(),其中 content 是一个返回某些内容的 Javascript 函数。

  • 你好,我正在寻找一种使用 selenium 从 URL 运行 js 文件脚本的方法,你能解释一下这一行的作用吗:\'myscript = settings.get_js_code()\',提前谢谢

  • 我已经通过使用 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()
    

    注意 :您的脚本必须返回某些内容才能获得结果。

  • 如果你想在后端执行此操作,我认为这是不可能的。如果你想在加载时执行某些功能,你可能需要检查你使用的模板语言。如果这是为了测试,你将需要 python selenium 来完成你的任务

  • @binu.py,我更新了主题,使其更清晰。也许这会有所帮助。至于抓取,我不需要从页面获取数据。关键任务是在浏览器范围内执行 JS。我认为,它应该像一个简单的 python 非 GUI 浏览器或类似的东西一样工作。

返回
作者最近主题: