Selenium基本使用、过检测

import time

from selenium import webdriver
from selenium.webdriver.chrome.service import Service as ChromeService

# 驱动文件所在路径
DIRVER_PATH = r'C:\Users\Administrator\Desktop\chromedriver.exe'

# 跳过selenium检测的js(这个非常重要,现在很多网站都有对selenium做检测)
# 这个文件是puppeteer (node.js平台上的一个类似seleium自动化测试的工具)的
# 这个js可以自己下载并编译一份
# 这里有人搞了一份每周一自动编译的https://github.com/requireCool/stealth.min.js
STEALTH_JS = r'C:\Users\Administrator\Desktop\stealth.min.js'


def main():
    # 负责启动和停止chromedriver的 Service 类
    service = ChromeService(executable_path=DIRVER_PATH)
    
    # 配置一些浏览器选项,这些选项可以取selenium找,有些选项是不同浏览器特有的,具体看官网即可。
    options = webdriver.ChromeOptions()
    options.add_experimental_option("excludeSwitches", ["enable-automation"])
    options.add_experimental_option("useAutomationExtension", False)
    # 添加插件运行
    options.add_extension(r"C:\Users\Administrator\Desktop\爬虫\XPath-Helper_v2.0.2.crx")
    # 设置这两个参数就可以避免密码提示框的弹出
    #prefs = {"credentials_enable_service": False, "profile.password_manager_enabled": False}
    #options.add_experimental_option("prefs", prefs)
    # 不退出浏览器
    # selenium在执行完所有操作后就会将浏览器关闭,如果你不想关就可以使用。
    # options.add_experimental_option('detach', True)
    
    # 防止检测到selenium(基本上只能过一些比较简单的检测)
    options.add_argument("--disable-blink-features")
    options.add_argument("--disable-blink-features=AutomationControlled")

    # 新版我试了,不指定service(那就等于没指定driver驱动)都可以?什么鸟原理?
    driver = webdriver.Chrome(service=service, options=options)
    
    # 过selenium检测(最简单的方法,不过还是有机会被检测到)
    # driver.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", {
    #     "source": """
    #     Object.defineProperty(navigator, 'webdriver', {
    #       get: () => undefined
    #     })
    #   """
    # })
    
    # 真正牛逼的过selenium检测,通过加载STEALTH_JS,cdp的作用百度一下即可。
    with open(STEALTH_JS) as f:
        js = f.read()

    #print(js)
    driver.execute_cdp_cmd(
        cmd="Page.addScriptToEvaluateOnNewDocument",
        cmd_args={
            "source": js
        }
    )

    # 打开一个标签页
    driver.get("https://bot.sannysoft.com/")

    # 最大化浏览器
    driver.maximize_window()

    time.sleep(30)
    
    # 关闭当前选卡项
    #driver.close()
    
    # 退出整个浏览器
    driver.quit()


if __name__ == '__main__':
    main()

总结最基本的使用:

# 初始化drvier服务类,指定driver文件的路径
service = ChromeService(executable_path=DIRVER_PATH)
# 如果需要就指定一些浏览器的选项
options = webdriver.ChromeOptions()
# 初始化浏览器类对象
driver = webdriver.Chrome(service=service, options=options)
# 打开一个标签页
driver.get("https://bot.sannysoft.com/")
# 退出浏览器
driver.quit()

posted @ 2023-07-17 11:15  蕝戀  阅读(264)  评论(0编辑  收藏  举报