selenium 自动化测试爬虫

前言

本节讲解 Python Selenium 爬虫实战案例,通过对实战案例的讲解,进一步认识 Selenium 框架。Selenium是一个用电脑模拟人操作浏览器网页,可以实现自动化,测试等。

1.下载selenium

终端执行

```
    pip install selenium
```

2.根据浏览器版本下载驱动

点击这里

这里是基础用法

方法 说明
find_element_by_id() 通过 id 属性值定位
find_element_by_name() 通过 name 属性值定位
find_element_by_class_name() 通过 class 属性值定位
find_element_by_tag_name() 通过 tag 标签名定位
find_element_by_link_text() 通过标签内文本定位,即精准定位。
find_element_by_partial_link_text() 通过标签内部分文本定位,即模糊定位。
find_element_by_xpath() 通过 xpath 表达式定位
find_element_by_css_selector() 通过 css 选择器定位

基础操作:

  1. 实例化一个浏览器对象
from selenium import webdriver
 
# 实例化一个浏览器对象(传入浏览器的驱动程序)
driver = webdriver.Chrome(executable_path='./chromedriver.exe')
  1. 对url发起请求
url = 'http://www.XXX.com'
driver.get(url)
  1. 定位标签

    此处以使用id定位搜索框为例

searchId = '搜索框id'
search_input = driver.find_element_by_id(searchId)
如果是class:
className = '搜索框class'
search_input = driver.find_element_by_class_name(className)
  1. 标签交互
    send_keys(在搜索框中输入需要搜索的关键字)
txt = 'CSDN'
search_input.send_keys(txt)
  1. 点击按钮
    定位标签 click() 进行点击,此处以id定位点击为例
btn = driver.find_element_by_id('id')
btn.click()
  1. 浏览器模拟器回退、前进和关闭
# 回退
driver.back()
 
# 前进
driver.forward()
 
# 关闭浏览器
driver.quit()
  1. 解析数据
# 导包
from selenium import webdriver
from lxml import etree
from time import sleep
 
# 实例化一个浏览器对象(传入浏览器的驱动程序)
driver = webdriver.Chrome(executable_path='./chromedriver.exe')
# 发起一个指定url请求
driver.get('URL')
 
# 获取浏览器当前页面的页面源码数据
page_text = driver.page_source
 
# 解析详细数据
tree = etree.HTML(page_text)
li_list = tree.xpath('xpath路径')
for li in li_list:
    name = li.xpath('以li_list下的xpath路径')[0]
    print(name)
 
sleep(5)
driver.quit()
  1. 执行javaScript代码
    以让javascript使浏览器滚动条向下滚动一屏幕距离。
driver.execute_script('window.scrollTo(0,document.body.scrollHeight)')

9.实现无可视化界面操作(无头浏览器)

# 实现无可视化界面的操作
chrome_options = Options()
chrome_options.add_argument('--headless')
chrome_options.add_argument('--disable-gpu')
 
driver = webdriver.Chrome(executable_path='./chromedriver.exe', options=chrome_options)
  1. 实现规避检测(去除浏览器识别)
# 实现规避检测
option = ChromeOptions()
option.add_experimental_option('excludeSwitches', ['enable-automation'])
 
driver = webdriver.Chrome(executable_path='./chromedriver.exe', options=option)
  1. 动作链

    鼠标动作:左键单击按住→拖动→释放
    这就是动作链
    这个可以用在很多登录验证的地方,那些需要滑动验证的,都可以去尝试一下。

from selenium import webdriver
from time import sleep
# 导入动作链对应的类
from selenium.webdriver import ActionChains
 
driver = webdriver.Chrome(executable_path='./chromedriver.exe')
 
driver.get('URL')
 
# 如果定位的标签是存在与iframe标签之中的则必须通过如下操作再进行标签定位
driver.switch_to.frame('iframeResult')  # 切换浏览器标签定位的作用域
div = driver.find_element_by_id('id')
 
# 动作链
action = ActionChains(driver)
# 点击长按指定的标签
action.click_and_hold(div)
 
# 这里可以不适用循环,看个人爱好
for i in range(5):
    # perform()立即执行动作链操作
    # move_by_offset(x, y):x水平方向  y竖直方向
    action.move_by_offset(20, 0).perform()
    sleep(0.5)
 
# 释放动作链
action.release()
 
sleep(2)
 
driver.quit()

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