Skip to content

chrome

创建新浏览器

sh
/Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome --remote-debugging-port=9221

保持命令行运行浏览器,执行一下操作

python
from selenium import webdriver

options = webdriver.ChromeOptions()
options.add_experimental_option('debuggerAddress', '127.0.0.1:9221')
cb = webdriver.Chrome(options=options)
cb.get('https://www.zhihu.com')
print(cb.title)

查看Google浏览器相关信息:

js
chrome://version/

修改Chrome用户存储地址

python
from selenium import webdriver

user_path = 'Users/home/love/Downloads'
options = webdriver.ChromeOptions()
options.add_argument('--user-data-dir={}'.format(user_path))
options.add_experimental_option('debuggerAddress', '127.0.0.1:9221')
cb = webdriver.Chrome(options=options)
cb.get('https://www.zhihu.com')
print(cb.title)

使用webdriver

py
from time import sleep
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By

service  = Service("./chromedriver")

driver = webdriver.Chrome(service=service)

driver.get("https://www.baidu.com")

sleep()

driver.close()

无头模式

python
from time import sleep
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.options import Options

service = Service("./chromedriver")

chrome_options = Options()
chrome_options.add_argument("--headless")
chrome_options.add_argument("--window-size=1920,1080")
driver = webdriver.Chrome(service=service, options=chrome_options)


driver.get("https://www.imooc.com")

text = driver.find_element(By.XPATH, '//*[@id="main"]/div[3]/div[1]/div[1]/h3/ul/li[1]/a').text
print(text)

sleep(5)

driver.quit()

图片懒加载

python
from time import sleep
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.options import Options

service = Service("./chromedriver")

chrome_options = Options()

#设置无头模式
chrome_options.add_argument("--headless")
chrome_options.add_argument("--window-size=1920,1080")

# 不加载图片
prefs = {'profile.managed_default_content_settings.images': 2}
chrome_options.add_experimental_option('prefs', prefs)

# 初始化
driver = webdriver.Chrome(service=service, options=chrome_options)

driver.get("https://www.imooc.com")

text = driver.find_element(By.XPATH, '//*[@id="main"]/div[3]/div[1]/div[1]/h3/ul/li[2]/a').text
print(text)

sleep(5)

driver.quit()

浏览器加载script脚本

1. 注入并执行 JavaScript 脚本

python
from selenium import webdriver

driver = webdriver.Chrome()
driver.get("https://example.com")

# 执行 JavaScript 脚本
driver.execute_script("alert('Hello, Selenium!');")

2. 注入外部 JavaScript 文件

如果你想加载一个外部 .js 文件,可以读取文件内容并用 execute_script() 执行:

python
with open("path/to/your_script.js", "r") as js_file:
    js_code = js_file.read()

driver.execute_script(js_code)

3. 在页面加载前注入脚本(使用 execute_cdp_cmd

如果你需要在页面加载之前注入脚本(例如修改 navigator.webdriver 以绕过检测),可以使用 Chrome DevTools Protocol (CDP):

python
driver.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", {
    "source": """
        Object.defineProperty(navigator, 'webdriver', {
            get: () => false
        });
    """
})
driver.get("https://example.com")  # 脚本会在页面加载前执行

4. 在特定元素上执行脚本

你可以结合 arguments[0] 来操作 DOM 元素:

python
element = driver.find_element("id", "my-element")
driver.execute_script("arguments[0].style.border = '3px solid red';", element)

5. 获取 JavaScript 执行结果

execute_script() 可以返回 JavaScript 的执行结果:

python
title = driver.execute_script("return document.title;")
print(title)  # 输出当前页面标题

6. 异步脚本执行(execute_async_script

如果脚本包含异步操作(如 setTimeoutfetch),可以使用 execute_async_script

python
driver.execute_async_script("""
    const callback = arguments[arguments.length - 1];
    setTimeout(() => {
        callback("Done after 2 seconds!");
    }, 2000);
""")