def get_options():
options = ChromeOptions()
options.add_argument("--disable-blink-features=AutomationControlled")
# options.add_experimental_option("excludeSwitches", ["enable-automation"])
# options.add_experimental_option("useAutomationExtension", False)
options.add_argument("--disable-extensions")
options.add_argument("--no-default-browser-check")
options.add_argument("--no-first-run")
options.add_argument("--disable-popup-blocking")
options.add_argument("--disable-default-apps")
options.add_argument("--disable-infobars")
# options.add_argument("--disable-gpu")
# options.add_argument("--disable-notifications")
options.add_argument("--disable-translate")
options.add_argument("--disable-device-discovery-notifications")
options.add_argument("--no-sandbox")
# options.add_argument("--disable-dev-shm-usage")
options.add_argument("--window-size=1920x1080")
options.add_argument("--disable-features=VizDisplayCompositor")
return options
def getchromeversion():
if 'win' in sys.platform:
import winreg
key = winreg.OpenKey(winreg.HKEY_CURRENT_USER, r'Software\Google\Chrome\BLBeacon')
chrome_version = winreg.QueryValueEx(key, 'version')[0]
return chrome_version
else:
from webdriver_manager.utils import get_browser_version_from_os
browserVersion = get_browser_version_from_os("google-chrome") # 获取当前系统chrome浏览器的版本号
print(f'Chrome version is {browserVersion}')
mainBrowserVersion = browserVersion.split(".")[0] # 获取chrome浏览器的主版本号
return browserVersion
def cmd_start_brower(chrome_path, port, user_data_dir):
# current_file_path = os.path.dirname(os.path.realpath(sys.argv[0]))
# user_data_dir = os.path.join(current_file_path, "pyppeteer_chrome") # 浏览器用户配置文件
chrome_path_temp = chrome_path.replace('\chrome.exe', '')
start_params = r'cd {} && chrome.exe --remote-debugging-port={} --user-data-dir="{}" --no-first-run --disable-popup-blocking --allow-file-access-from-files --no-default-browser-check'
os.popen(start_params.format(chrome_path_temp, port, user_data_dir))
def get_session_url(chrome_path, port, user_data_dir):
url = f'http://127.0.0.1:{port}/json/version'
try:
res = requests.get(url)
print(res.text)
webSocketDebuggerUrl = json.loads(res.text)['webSocketDebuggerUrl']
except:
# 命令行启动
cmd_start_brower(chrome_path, port, user_data_dir)
time.sleep(random.randint(4, 6))
def start_brower():
from undetected_chromedriver import Chrome, ChromeOptions, find_chrome_executable
user_data_name = "chrome1"
port = 9315
user_agent = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36'
current_path = os.path.dirname(os.path.realpath(sys.argv[0]))
# 浏览器用户配置文件
user_data_dir = os.path.join(current_path, user_data_name)
# 浏览器版本号
version = getchromeversion().split('.')[0]
# 下载驱动
currentpath = os.path.dirname(os.path.realpath(sys.argv[0]))
executable_path = os.path.join(currentpath, 'chromedriver_win32', f'chromedriver_{version}.exe')
if not os.path.exists(executable_path):
# get_chromedriver_version(path, version) # 在另一篇文章中
print('自动下载驱动')
# 浏览器路径
chrome_path = find_chrome_executable()
print('executable_path:', executable_path)
print('user_data_dir:', user_data_dir)
print('chrome_path:', chrome_path)
# 检测浏览器是否已打开
get_session_url(chrome_path, port, user_data_dir)
option = get_options()
option.add_argument(fr'--user-data-dir="{user_data_dir}"')
option.add_argument(f"--user-agent={user_agent}")
option.debugger_address = f"127.0.0.1:{port}"
driver = Chrome(options=option, executable_path=executable_path)
print(driver.title)
time.sleep(2)
driver.get('https://blog.youkuaiyun.com/lwdfzr/article/details/135410359')
time.sleep(random.randint(3, 5))
undetected_chromedriver 通过端口控制已打开的浏览器时,会打开一个多余的空白窗口,
鼠标放在Chrome() 按ctrl+B查看源码,找到这段代码,注释掉
undetected_chromedriver的作者已转移到另一个库nodriver