备忘录
驱动下载网站
最新的https://googlechromelabs.github.io/chrome-for-testing/
,
历史的https://chromedriver.storage.googleapis.com/index.html
pip install selenium==4.6
# -*- coding:utf-8 -*-
import os
import random
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
def use_chrome(used_port):
"""
启用chrome端口,检测当前端口是否被占用,占用则更换新端口,启动chrome.
:return: 使用的端口 used_port
"""
find_port = os.popen('netstat -ano|findstr {}'.format(used_port)).readlines()
while str(used_port) in find_port:
print(used_port, '端口已被占用,正在更换端口')
used_port += 1
find_port = os.popen('netstat -ano|findstr {}'.format(used_port)).readlines()
os.system(r'start chrome.exe --remote-debugging-port={} --user-data-dir="C:\dpp\chrome"'.format(used_port))
print('使用端口:', used_port)
return used_port
def check_pid(used_port):
"""
查看当前进行的pid编号
:return: pid进行编号
"""
used_port = '127.0.0.1:' + str(used_port)
find_port = os.popen('netstat -ano|findstr {}'.format(used_port)).readlines()
for ele in find_port:
if used_port in ele:
used_pid = ("".join(ele).split(' ')[-1])
return used_pid
used_port = use_chrome(random.randint(9222, 9552))
# --- 进行chrome的配置
options = webdriver.ChromeOptions()
options.add_argument("service_args = ['–ignore-ssl-errors = true', '–ssl-protocol = TLSv1']")
# --- chrome的文件路径
options.binary_location = r'C:\Program Files\Google\Chrome\Application\chrome.exe'
# ---- chrome进行端口接管调用
options.add_experimental_option("debuggerAddress", "127.0.0.1:{}".format(used_port))
options.add_argument('-incognito')
# --- chromedriver的文件路径
chrome_driver = Service(r"C:\chromedriver.exe")
# --- 引入chrome配置
driver = None
try:
driver = webdriver.Chrome(options=options, service=chrome_driver)
# --- 设置宽和高位置
driver.maximize_window()
except Exception as err:
print('开启浏览器错误:\n', ValueError(err))
# --- 拦截webdriver检测代码
driver.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument",
{"source": """
Object.defineProperty(navigator, 'webdriver', {
get: () => undefined
})
"""})
# 超时访问
try:
driver.set_page_load_timeout(9)
except Exception as e:
pass
# 访问
driver.get('http://www.baidu.com')
input("1111")
# 获取进程
pid = check_pid(used_port)
os.system('chcp 65001')
# 杀死pid 可以用 cmd执行
os.system(fr"taskkill -t -f /pid {pid} ")
# 很早写的 selenium==4.6 也能用