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
)
如果脚本包含异步操作(如 setTimeout
或 fetch
),可以使用 execute_async_script
:
python
driver.execute_async_script("""
const callback = arguments[arguments.length - 1];
setTimeout(() => {
callback("Done after 2 seconds!");
}, 2000);
""")