就直接从案例下手就行了
安装很简单

pip install selenium

还需要找个chromedriver这个是针对浏览器的 这是谷歌的 你要别的,再找

https://npmmirror.com/mirrors/chromedriver

还得看浏览器的版本才行

定位元素
查找元素 最通用的就是xpath, 其他还有很多,xpath要用的熟悉才好

chrome.find_element(By.XPATH,'')

切换

一.打开2个页面
这里要做切换,不然你看着是切换了,实际上没切换,切换完了 还得切换回来

browser.switch_to.window(browser.window_handles[-1])  # 跳转到最后一个窗口
    job_detail = browser.find_element(By.XPATH, '//*[@id="job_detail"]/dd[2]').text
    browser.close() # 用完了就关闭
    browser.switch_to.window(browser.window_handles[0]) # 再切换回来

二. iframe
这个玩意相当于网页里又套了个网页 ,方法就是先找到iframe,然后再切换

iframe = chrome.find_element(By.XPATH, '//div[@class="QUI_POP_CONT"]/iframe[1]')
    chrome.switch_to.frame(iframe)

关于等待
等待是分3种情况

time.sleep(10) # 这个是死等 必须10秒
web.implicitly_wait(10) # 这个是活等,且全局的,就是最多等10秒加载,不加载拉倒

这个死等和活等通常要配合一起用,有的时候比如验证码,在活等后,还没完全加载,然后去操作就有问题,所以再加一个死等

WebDriverWait(web, 10, 0.5).until(
        EC.presence_of_element_located((By.XPATH, "/html/body/div[5]/div[2]/div[1]/div/div"))
    ) #  这个玩意叫单等,单独等一个xxxx元素. 如果出现了. 就过, 如果不出现. 超时后, 直接报错. 等10秒,每0.5秒去看下这个元素出现没有

关于cookies操作

登录后,获得cookies 写到文件里 ,再登录就加载cookies ,就自动登录了
骚操作就比如登录后,加载cookies 就requests 干页面,但是,cookies有过期时间,这是服务器设置的 ,这块我直接干代码

cookies_list = web.get_cookies()  # 从selenium对象登录、获得cookies list

这货就是[{},{}] 长这样,列表里套字典 ,而且这个东西跟request的cookies 不通用,然后下面的代码 可以转成requests的cookies

这个方法就是存cookies到文件

def save_website_cookies(filename, cookies_lists):
    with open(filename, 'a', encoding='utf-8') as file_object:
        file_object.write(json.dumps(cookies_lists))

转换到requests的cookies

def get_book_shelf_content(cookies_lists):
    cookies_dict = {}
    for items in cookies_lists:
        key = items['name']
        value = items['value']
        cookies_dict[key] = value
    print(cookies_dict)

那么如何登录并加载cookies呢? 看下面的代码

# 第一个函数就是读刚才写入的cookies文件,返回列表

def load_website_cookies(filename):
    with open(filename, 'r', encoding='utf-8') as file_object:
        ck_list = json.loads(file_object.read())
    return ck_list

# 第二个函数,就是传进来个一个url ,cookies文件,和selenium对象,这个函数调用了第一个函数

def login_website_load_cookies(site_url, cookies_file, chrome):
    chrome.get(site_url) # 先登录下
    time.sleep(5) # 死等5秒 让网页加载cookies
    cookies_list = load_website_cookies(cookies_file)
    for cookie in cookies_list:
        chrome.add_cookie(cookie)
    chrome.get(site_url) # 重新刷新网页

选项

这个就是selenium的选项 ,这个都是写死的 没啥 我就写几个

# 配置无头信息
from selenium.webdriver.chrome.options import Options

opt = Options()
opt.add_argument("--headless")
opt.add_argument("--disable-gpu")

注意, 此时我们要了解一下这个插件的工作机制. 它是在整个页面加载的时候就开始对浏览器参数进行读取. 所以我们常规的对Chrome设置是无效的. 此时, 需要添加以下一段代码来规避检测.

# 亲测, 88版本以后可以用.
option = Options()
# option.add_experimental_option('excludeSwitches', ['enable-automation'])
option.add_argument('--disable-blink-features=AutomationControlled') # 就这一行
web = Chrome(options=option)

# 亲测, 88版本之前可以用,加下面的脚本
# web = Chrome()
#
# web.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", {
#   "source": """
#   navigator.webdriver = undefined
#     Object.defineProperty(navigator, 'webdriver', {
#       get: () => undefined
#     })
#   """
# })

**1. 总结, selenium的使用方案一般是:

1. 涉及登录. 验证码不想搞. 

   可以考虑用selenium完成登录. 然后提取cookie. 最后用requests发送真正的请求. 

2. 涉及频繁的校验验证(例如boss).

   直接用selenium提取页面源代码. 叫给lxml处理.**

后边文章总结下 对付验证码的方法