本节讲解 Python Selenium 爬虫实战案例,通过对实战案例的讲解,进一步认识 Selenium 框架。Selenium是一个用电脑模拟人操作浏览器网页,可以实现自动化,测试等。
终端执行
```
pip install selenium
```
点击这里
这里是基础用法
方法 | 说明 |
---|---|
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 选择器定位 |
基础操作:
from selenium import webdriver
# 实例化一个浏览器对象(传入浏览器的驱动程序)
driver = webdriver.Chrome(executable_path='./chromedriver.exe')
url = 'http://www.XXX.com'
driver.get(url)
定位标签
此处以使用id定位搜索框为例
searchId = '搜索框id'
search_input = driver.find_element_by_id(searchId)
如果是class:
className = '搜索框class'
search_input = driver.find_element_by_class_name(className)
txt = 'CSDN'
search_input.send_keys(txt)
btn = driver.find_element_by_id('id')
btn.click()
# 回退
driver.back()
# 前进
driver.forward()
# 关闭浏览器
driver.quit()
# 导包
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()
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)
# 实现规避检测
option = ChromeOptions()
option.add_experimental_option('excludeSwitches', ['enable-automation'])
driver = webdriver.Chrome(executable_path='./chromedriver.exe', options=option)
动作链
鼠标动作:左键单击按住→拖动→释放
这就是动作链
这个可以用在很多登录验证的地方,那些需要滑动验证的,都可以去尝试一下。
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()