首页 👨‍💻计算机,🐍Python

selenium浏览器自动化

概念:

  • Selenium 是一个 Web 应用的自动化框架
  • 自动化:通过它,我们可以写出自动化程序,像人一样在浏览器里操作web界面。 比如点击界面按钮,在文本框中输入文字 等操作,还能从web界面获取信息。 比如获取12306票务信息,招聘网站职位信息,财经网站股票价格信息 ,以及滑动模块验证码滑动等等,然后用程序进行分析处理。
  • Selenium 的自动化原理

image-20200928151327425

selenium模块的安装与配置

安装selenium库

pip install selenium

chromedriver驱动的配置

配置chromedriver驱动,一定要注意“驱动”和“谷歌浏览器”版本一定是要相匹配,否则不能使用。

① 检查谷歌浏览器的版本

这里首先提供一个详细的地址供大家查看:
https://jingyan.baidu.com/article/95c9d20d74a1e8ec4f756149.html
点击“右上角三个点” --> 点击“设置” --> 点击 “关于chrome”,出现如下界面。

image-20200928151629048

② 下载chromedriver驱动

这里再次提供一个详细的地址,供大家选择各种版本驱动程序:
http://chromedriver.storage.googleapis.com/index.html
从上面的图中可以看出,谷歌浏览器的版本是【 84.0.4147.125】,这里我们选择的对应版本的驱动,如下图所示。

image-20200928152016452

点进该文件后,可以根据我们的操作系统,选择对应的驱动。我选的是win32位

image-20200928152057078

③ chromedriver驱动的配置

解压上述下载好的文件,并将解压后我们得到的chromedriver.exe文件,需要放到python的安装路径下(和python.exe放在一起)。
首先,你可以查看你的python解释器安装在哪里!

然后,将chromedriver.exe放置和python.exe在一起。

GIF

④检验selenium是否可用

使用如下两行代码,如果谷歌浏览器成功被驱动打开,证明上述安装和配置没问题。

from selenium import webdriver
browser = webdriver.Chrome()

案例展示: 使用selenium爬取jd商城数据

1,导入第三方库

from selenium import webdriver
from selenium.webdriver.common.keys import Keys # 键盘按键操作库
import time

2,模拟用户访问网址

def spider(url, keyword):
    driver = webdriver.Chrome()  # 定义浏览器
    driver.get(url)
    driver.maximize_window()  # 窗口最大化
    driver.implicitly_wait(5)  # 隐式等待,确保所有节点完全加载出来
    try:
        input_tag = driver.find_element_by_id('key')     # 定位搜索栏 输入口罩
        input_tag.send_keys(keyword)  # 模拟键盘输入
        input_tag.send_keys(Keys.ENTER)  # 回车键
        time.sleep(5)  # 等待5秒时间
        driver.execute_script(
            'window.scrollTo(0,document.body.scrollHeight)')  # 滑动到最底部
        get_goods(driver)
    finally:
        driver.close()  # 不管有没有异常,都执行

3,定位商品数据抓取

def get_goods(driver):
    try:
        goods = driver.find_elements_by_class_name('gl-item')
        for good in goods:  # 商品名字 连接 价格 评论
            detail_url = good.find_element_by_tag_name(
                'a').get_attribute('href')
            p_name = good.find_element_by_css_selector(
                '.p-name em').text.replace('\n', '')  # 抓取名字
            price = good.find_element_by_css_selector('.p-price i').text  # 价格
            p_commint = good.find_element_by_css_selector(
                '.p-commit a').text  # 获取评论
            msg = """
            商品:%s
            连接:%s
            价格:%s
            评论:%s
            """ % (p_name, detail_url, price, p_commint)
            print(msg)

            with open('jd.txt', 'a', encoding=" utf-8") as jdf:
                jdf.write(msg)
                print("打印完毕")

    except Exception:
        pass

4,抓取大量数据

    try:
        button = driver.find_element_by_link_text('下一页 ')
        button.click()
        time.sleep(5)
        get_goods(driver)  # 调用抓取数据的函数
    except Exception:
        pass
5,执行
if __name__ == '__main__':  # 标准写法,用于判断文件程序入口
    spider("https://www.jd.com/", keyword='macbook pro')

image-20200928152932368




文章评论

目录