Python-Selenium 调用 JavaScript

2024-01-01 06:29:14

当前环境:

Windows 10 + Python 3.7 + selenium==3.141.0 + urllib3==1.26.2 + Chromium 65.0.3312.0 (32 位)

在 WebDriver 中提供了执行 JavaScript 的方法:

execute_script(script, *args),JavaScript 代码以字符串的形式构建,然后传给该方法执行。

参数说明:

script: 以字符串形式构建的 JavaScript 代码;
*args: 以可变参数形式接收参数,并将参数传递给 JavaScript 代码。在 JavaScript 代码中会以数组arguments来接收 execute_script() 方法传递的参数。


from selenium import webdriver
import time

if __name__ == '__main__':
    import os
    os.system('chcp 65001')
    os.system('taskkill /F /IM chromedriver.exe')
    # Chrome 路径
    CHROME_PATH = r'C:\Program Files (x86)\65.0.3312.0\chrome-win32\chrome.exe'
    # ChromeDriver 路径
    CHROMEDRIVER_PATH = r'C:\Program Files (x86)\65.0.3312.0\chromedriver_win32\chromedriver.exe'

    options = webdriver.ChromeOptions()
    # 取消 Chrome 正受到自动测试软件的控制
    options.add_experimental_option("excludeSwitches", ["enable-automation"])
    # 取消 请停用以开发者模式运行的扩展程序
    options.add_experimental_option("useAutomationExtension", False)
    # 手动指定使用的浏览器位置
    options.binary_location = CHROME_PATH
    driver = webdriver.Chrome(executable_path=CHROMEDRIVER_PATH, options=options)

    url = 'https://www.baidu.com'
    driver.get(url)
    print(driver.title)

    # 1 点击 按键
    element = driver.find_element_by_id('su')
    driver.execute_script("arguments[0].click();", element)

    # 2 打开新标签页 (空白)
    driver.execute_script("window.open('','_blank');")

    # 2 打开新标签页 (特定网址)
    new_tab_url = 'https://www.selenium.dev/zh-cn/#'
    driver.execute_script(f'window.open("{new_tab_url}", "_blank");')

    # 3 获取 属性 value 值
    js = "document.getElementById('su').getAttribute('value')"
    value = driver.execute_script("return %s" % js)
    print(value)

    # 退出
    driver.quit()
'''
参考:
https://blog.csdn.net/minzhung/article/details/102744491
https://blog.csdn.net/kinghzking/article/details/122626574
https://blog.csdn.net/minzhung/article/details/102744491
'''

文章来源:https://blog.csdn.net/yudiandian2014/article/details/135320767
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。