selenium操作浏览器模块

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('
', '')
    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('
', '')
        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()
京东翻页代码
原文地址:https://www.cnblogs.com/yangmeichong/p/14272424.html