selenium模块

2022/01/05 Python

selenium模块,浏览器自动化

1、简介

selenium是基于浏览器自动化的一个模块

selenium模块和爬虫之间的关联

  1. 便捷的获取网站中动态加载的数据
  2. 便捷实现模拟登陆

2、使用

selenium环境安装

pip3 install selenium

下载一个浏览器的驱动程序

https://chromedriver.storage.googleapis.com/index.html
http://npm.taobao.org/mirrors/chromedriver/

任意一个网站,根据浏览器版本选择

然后就可以使用selenium实例化一个浏览器对象,

from selenium import webdriver

bro = webdriver.Chrome(executable_path='./chromedriver')

运行之后会打开一个浏览器窗口,提示Chrome正受到自动测试软件的控制。

#!/usr/bin/env python3
# -*- coding:utf8 -*-
from selenium import webdriver
from lxml import etree

bro = webdriver.Chrome(executable_path='./chromedriver')

bro.get('http://scxk.nmpa.gov.cn:81/xk/')

page_text = bro.page_source

tree = etree.HTML(page_text)
li_list = tree.xpath('//ul[@id="gzlist"]/li')

names = []

for li in li_list:
    name = li.xpath('./dl/@title')[0]
    names.append(name)

print(names)
# 关闭浏览器
bro.quit()
    

selenuim

3、其他常用操作

Demo:

from selenium import webdriver
from lxml import etree
import time

bro = webdriver.Chrome(executable_path='./chromedriver')

bro.get('https://www.taobao.com/')

# 标签定位 定位淘宝的搜索框
search_input = bro.find_element_by_id('q')

# 标签交互 给搜索框赋值
search_input.send_keys('mac')

# 执行js代码
bro.execute_script('alert(1)')

# 点击搜索按钮
btn = bro.find_element_by_class_name('btn-search')
btn.click()

time.sleep(5)
bro.quit()

3.1 标签定位的方法

  1. bro.find_element_by_class_name()
  2. bro.find_element_by_id()
  3. bro.find_element_by_xpath()
  4. bro.find_element_by_css_selector()
  5. bro.find_element_by_link_text()
  6. bro.find_element_by_name()
  7. bro.find_element()
  8. bro.find_element_by_tag_name()

3.2 执行js代码

如demo:

bro.execute_script('alert(1)')

# 里面可以放任意的js代码

3.3 执行事件

如demo:

btn.click()

也可以通过js代码执行

# 滚动一屏的高度
bro.execute_script('window.scrollTo(0, document.body.scrollHeight)')
# 可以执行一些其他的事件 如:回退
bro.back()
# 前进
bro.forward()
# 关闭浏览器
bro.quit()

3.4 iframe处理

页面中也嵌套的iframe就会找不到,需要切换浏览器标签定位的作用域

bro.switch_to.frame('iframeID')

3.5 动作链

一系列的连续动作

# 引入对应的模块
from selenium.webdriver import ActionChains
bro = webdriver.Chrome(executable_path='./chromedriver')
div = bro.find_element_by_id('divid')
# 动作链
action = ActionChains(bro)
# 点击且长按
action.click_and_hold(div)
# 拖动
for i in range(5):
  action.move_by_offset(20,0).perform()
  sleep(0.3)
  
# 释放动作链
action.release()

bro.quit()

4、无头浏览器

把浏览器弹窗取消,但是动作照常执行。

from selenium.webdriver.chrome.options import Options

chrome_options = Options()
chrome_options.add_argument('--headless')
chrome_options.add_argument('--disable-gpu')
bro = webdriver.Chrome(executable_path='./chromedriver',chrome_options=chrome_options )

5、规避监测

from selenium.webdriver import ChromeOptions
option = ChromeOptions()
option.add_experimental_option('excludeSwitches', ['enable-automation'])
bro = webdriver.Chrome(executable_path='./chromedriver', options=option )

Search

    Table of Contents