环境要求

1、安装 python3 环境后,用 pip 安装 selenium 包:pip install selenium

2、安装 Google Chrome 浏览器,我安装的版本是:89.0.4389.90(64 位)

3、安装 chromedriver,官网下载地址是 https://chromedriver.storage.googleapis.com/index.html,也可以从国内镜像下载 https://npm.taobao.org/mirrors/chromedriver 。注意,上图 Chrome 浏览器的主版本号是89,下载的 chromedriver 主版本号要一致:

Windows 系统下载 chromedriver_win32.zip,将压缩包内的 chromedriver.exe 文件放置 PATH 环境变量所指目录,如 C:\Windows 目录。

 

示例代码

功能说明:模拟使用 Chrome 浏览器打开搜狗主页,输入关键词“水果”,点击搜索按钮,停顿3秒后,获取页面的搜索结果数量。

import time

from selenium import webdriver
from selenium.common.exceptions import NoSuchElementException


def get_driver():
    opt = webdriver.ChromeOptions()
    opt.add_argument('--no-sandbox')  # 以最高权限运行
    # opt.add_argument('--headless')  # 无头浏览器
    opt.add_argument('--disable-gpu')  # 禁用GPU加速
    opt.add_argument('--window-size=1440,900')  # 设置窗口分辨率

    driver = webdriver.Chrome(options=opt)
    driver.set_page_load_timeout(60)  # 设置页面加载超时
    driver.set_script_timeout(30)  # 设置页面异步js执行超时

    return driver


def open_page():
    driver = get_driver()

    try:
        driver.get('https://www.sogou.com/')
    except Exception as err:
        driver.quit()
        print('URL加载失败:' + str(err))
        return
    
    try:
        # 页面存在这个元素加载成功
        driver.find_element_by_css_selector('#query')
    except NoSuchElementException:
        filename = str(int(time.time() * 100000)) + '.png'
        driver.save_screenshot(filename)  # 生成页面截图
        driver.quit()
        print('页面加载失败,截图: ' + filename)
        return

    try:
        # 输入文字
        driver.find_element_by_css_selector('#query').send_keys('水果')
        # 点击提交
        driver.find_element_by_css_selector('#stb').click()
    except Exception as err:
        filename = str(int(time.time() * 100000)) + '.png'
        driver.save_screenshot(filename)
        driver.quit()
        print('异常:' + str(err))
        return

    # 休眠3秒
    time.sleep(3)

    try:
        # 页面存在这个元素则表示提交成功
        driver.find_element_by_css_selector('.num-tips')
    except NoSuchElementException:
        filename = str(int(time.time() * 100000)) + '.png'
        driver.save_screenshot(filename)
        print('提交失败,截图: ' + filename)
    else:
        msg = driver.find_element_by_css_selector('.num-tips').get_attribute('innerText')
        print(msg)
    finally:
        driver.quit()


if __name__ == '__main__':
    open_page()

截图加以说明:

运行结果: