selenium模块用途
selenuim原先多用于测试部门测试,由于它可以操作浏览器,有时候也用于爬虫领域
优点:操作浏览器访问网站
缺点:速度较慢
下载模块
# 下载模块 pip3 install selenium """selenuim由于需要操作浏览器,所以在下载模块的基础之上还需要下载一个操作浏览器的驱动文件""" # 下载驱动 操作不同的浏览器需要下载不同的驱动,我们统一使用谷歌 驱动文件可以存放在两个地方 1.项目的根目录下(不推荐) 2.将下载好的驱动文件放到python文件夹里面的scripts目录中(推荐) http://npm.taobao.org/mirrors/chromedriver/2.35/ if mac系统: 然后将解压后的chromedriver移动到/usr/local/bin目录下 注意:selenium3默认支持的webdriver是Firfox,而Firefox需要安装geckodriver 下载链接:https://github.com/mozilla/geckodriver/releases
基本使用方式
# 基本使用 from selenium import webdriver import time # 打开谷歌浏览器 bro = webdriver.Chrome() #其余浏览器 # bro = webdriver.Firefox() # bro = webdriver.Safari() # bro = webdriver.Ie() # bro = webdriver.Edge() # 访问网站 bro.get('https://www.jd.com') time.sleep(5) # 自动关闭浏览器 bro.close()
自动打开京东或百度搜索定义物品
from selenium import webdriver import time # 模拟键盘按键 from selenium.webdriver.common.keys import Keys # 打开谷歌浏览器 bro = webdriver.Chrome() # bro = webdriver.Firefox() # bro = webdriver.Safari() # bro = webdriver.Ie() # bro = webdriver.Edge() # 访问网站 bro.get('https://www.baidu.com') inputEle = bro.find_element_by_id('kw') # inputEle = bro.find_element_by_id('key') # 京东 inputEle.send_keys("美女") inputEle.send_keys(Keys.ENTER) time.sleep(10) bro.close()
selenuim模块登录百度
# 1、find_element_by_id 根据id找 # 2、find_element_by_link_text 根据链接名字找到控件(a标签的文字) # aEle = bro.find_element_by_link_text('新闻') # print(aEle.text) # 3、find_element_by_partial_link_text 根据链接名字找到控件(a标签的文字)模糊查询 # 4、find_element_by_tag_name 根据标签名 # 5、find_element_by_class_name 根据类名 # 6、find_element_by_name 根据属性名 # 7、find_element_by_css_selector 根据css选择器
# 8、find_element_by_xpath
"""
XML:
用途:1.配置文件
2.前端页面(类似于HTML)
odoo框架
erp 前端界面使用的就是XML
"""
from selenium import webdriver import time bro=webdriver.Chrome() bro.get("https://www.baidu.com") bro.implicitly_wait(10) """ #d1 等价于 id='d1' .c1 等价于 class='c1' div p 找div里面所有的p(后代) div > p 找div里面第一层级的p(儿子) """ # 利用selenuim模拟百度登录操作 # 查找到登录的a标签 aEle = bro.find_element_by_link_text('登录') # 点击登录标签 aEle.click() # 查找用户名登录标签 a1Ele = bro.find_element_by_id('TANGRAM__PSP_11__footerULoginBtn') # 点击 a1Ele.click() # 查找用户名和密码标签输入内容 usernameEle = bro.find_element_by_id('TANGRAM__PSP_11__userName') usernameEle.send_keys('admin123') time.sleep(1) passwordEle = bro.find_element_by_id('TANGRAM__PSP_11__password') passwordEle.send_keys('admin123') # 查找登录按钮 点击即可 btnEle = bro.find_element_by_id('TANGRAM__PSP_11__submit') btnEle.click() time.sleep(5) bro.close() # 主动关闭页面
爬取京东商品信息
# 常用方法 from selenium import webdriver import time from selenium.webdriver.common.keys import Keys bro = webdriver.Chrome() bro.get("http://www.jd.com") bro.implicitly_wait(10) # 延时等待 # 查找搜索商品的input框 inputEle = bro.find_element_by_id('key') # 输入商品内容 inputEle.send_keys('手机') # 按下回车确认搜索内容 inputEle.send_keys(Keys.ENTER) # 研究页面商品规律 发现是一个个的li标签 都具有class属性 goods_li = bro.find_elements_by_class_name('gl-item') # 分析每个li里面的数据特征 for good in goods_li: html标签class中p-img下的a标签下的img标签中的src img_url = good.find_element_by_css_selector('.p-img a img').get_attribute('src') if not img_url: img_url = 'https:' + good.find_element_by_css_selector('.p-img a img').get_attribute('data-lazy-img') url = good.find_element_by_css_selector('.p-img a').get_attribute('href') price = good.find_element_by_css_selector('.p-price i').text name = good.find_element_by_css_selector('.p-name em').text.replace('\n', '') commit = good.find_element_by_css_selector('.p-commit a').text print(''' 商品链接:%s 商品图片:%s 商品名字:%s 商品价格:%s 商品评论数:%s ''' % (url, img_url, name, price, commit)) time.sleep(5) #主动关闭链接 bro.close()
from selenium import webdriver import time from selenium.webdriver.common.keys import Keys bro = webdriver.Chrome() bro.get("https://www.jd.com") # WebElement延时等待 bro.implicitly_wait(10) # 分析每个li里面的数据特征 def get_goods(bro): print("---------------------------------------") # 研究页面商品规律 发现是一个个的li标签 都具有class属性 goods_li = bro.find_elements_by_class_name('gl-item') # html标签class中p-img下的a标签下的img标签中的src for good in goods_li: img_url = good.find_element_by_css_selector('.p-img a img').get_attribute('src') if not img_url: img_url = 'https:' + good.find_element_by_css_selector('.p-img a img').get_attribute('data-lazy-img') url = good.find_element_by_css_selector('.p-img a').get_attribute('href') price = good.find_element_by_css_selector('.p-price i').text name = good.find_element_by_css_selector('.p-name em').text.replace('\n', '') commit = good.find_element_by_css_selector('.p-commit a').text print(''' 商品链接:%s 商品图片:%s 商品名字:%s 商品价格:%s 商品评论数:%s ''' % (url, img_url, name, price, commit)) next_page = bro.find_element_by_partial_link_text("下一页") time.sleep(1) next_page.click() time.sleep(1) get_goods(bro) input_search = bro.find_element_by_id("key") input_search.send_keys("手机") input_search.send_keys(Keys.ENTER) # 进入另外一个页面 try: get_goods(bro) except Exception as e: print("结束") finally: bro.close() # time.sleep(5) # #主动关闭链接 # bro.close()