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

从 Python 执行页面上的 JS 代码

Student_102345 1月前

32 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]
    
返回
作者最近主题: