python爬虫之selenium+phantomjs/Chrome/Firefox

selenium

  • 定义
1、Web自动化测试工具,可运行在浏览器,根据指令操作浏览器
2、只是工具,必须与第三方浏览器结合使用
  • 安装
Linux: sudo pip3 install selenium
Windows: python -m pip install selenium

phantomjs浏览器

  • 定义
无界面浏览器(又称无头浏览器),在内存中进行页面加载,高效
  • 安装(phantomjs、chromedriver(类似能驱动浏览器,启动谷歌的)、geckodriver(启动火狐的))

Windows

1、下载对应版本的phantomjs、chromedriver、geckodriver
2、把chromedriver.exe拷贝到python安装目录的Scripts目录下(添加到系统环境变量)
   # 查看python安装路径: where python
3、验证
   cmd命令行: chromedriver

# 下载地址
chromedriver : 下载对应版本(输入chrome://version/)查看自己的浏览器版本
http://chromedriver.storage.googleapis.com/index.html
http://npm.taobao.org/mirrors/chromedriver/

geckodriver
https://github.com/mozilla/geckodriver/releases

Linux

1、下载后解压
   tar -zxvf geckodriver.tar.gz 
2、拷贝解压后文件到 /usr/bin/ (添加环境变量)
   sudo cp geckodriver /usr/bin/
3、更改权限
   sudo -i
   cd /usr/bin/
   chmod 777 geckodriver
    
安装方法都一样,就phantomjs有点区别,解压后,找到bin,bin里面的内容添加到环境变量
  • 使用

示例代码一:使用 selenium+浏览器 打开百度

from selenium import webdriver
import time

browser = webdriver.Chrome(excutable_path='/路径/geckodriver')  # 如果没添加到环境变量需要指明路径
browser.get('http://www.baidu.com/')
browser.save_screenshot('baidu.png')
browser.quit()

示例代码二:打开百度,搜索赵丽颖,查看

from selenium import webdriver
import time

browser = webdriver.Chrome()
browser.get('http://www.baidu.com/')

# 向搜索框(id kw)输入 赵丽颖  查看代码,看输入框的name是什么,百度的name=kw
ele = browser.find_element_by_xpath('//*[@id="kw"]')
ele.send_keys('赵丽颖')

time.sleep(1)
# 点击 百度一下 按钮(id su)
su = browser.find_element_by_xpath('//*[@id="su"]')
su.click()

# 向搜索框输入美女
browser.find_element_by_id('kw').send_keys('美女')

# 点击百度一下按钮
browser.find_element_by_id('su').click()

# 给出时间加载页面
time.sleep(2)

# 点击下一页
browser.find_element_by_class_name('n').click()

# 截图
browser.save_screenshot('赵丽颖.png')
# 关闭浏览器
browser.quit()
  • 浏览器对象(browser)方法
1、browser = webdriver.Chrome(executable_path='path')
2、browser.get(url)
3、browser.page_source # 查看响应内容
4、browser.page_source.find('字符串')
   # 从html源码中搜索指定字符串,没有找到返回:-1
   # 应用场景,主要使用判断是否是最后一页
5、browser.quit() # 关闭浏览器

代码:

from selenium import webdriver

# 创建浏览器对象
browser = webdriver.Chrome()

# 打开百度
browser.get('http://www.baidu.com')

# 打印响应内容
html = browser.page_source
result = browser.page_source.find('kw')
print(result)
  • 定位节点

单元素查找(1个节点对象)

#  找到第一个节点就返回
1、browser.find_element_by_id('')
2、browser.find_element_by_name('')
3、browser.find_element_by_class_name('')
4、browser.find_element_by_xpath('')
... ...

多元素查找([节点对象列表])

1、browser.find_elements_by_id('')
2、browser.find_elements_by_name('')
3、browser.find_elements_by_class_name('')
4、browser.find_elements_by_xpath('')
... ...
  • 节点对象操作
1、ele.send_keys('') # 搜索框发送内容
2、ele.click()  # 点击事件
3、ele.text          # 获取文本内容
4、ele.get_attribute('src') # 获取属性值

chromedriver设置无界面模式

from selenium import webdriver

options = webdriver.ChromeOptions()
# 添加无界面参数
options.add_argument('--headless')
browser = webdriver.Chrome(options=options)
browser.get('http://www.baidu.com/')
browser.save_screenshot('baidu.png')

切换页面

1、适用网站

页面中点开链接出现新的页面,但是浏览器对象browser还是之前页面的对象

2、应对方案

# 获取当前所有句柄(窗口)
all_handles = browser.window_handles
# 切换到新的窗口
browser.switch_to_window(all_handles[1])

Web客户端验证

弹窗中的用户名和密码如何输入?

不用输入,在URL地址中填入就可以

示例:

from selenium import webdriver
# 注意在协议中添加:用户名:密码@
url = 'http://username:password@www.***.com'
browser = webdriver.Chrome()
browser.get(url)

你可能感兴趣的:(爬虫,python,selenium)