selenium

tiankele0 2020-06-09

selenium

概念:基于浏览器自动化的一个模块.

selenium和爬虫之间的关联是什么?

便捷的获取页面中动态加载的数据

  • requests模块进行数据爬取:可见非可得
  • selenium:可见即可得

主要用于爬取动态加载的数据,直接用selenium就可以获取

注意点:selenium完全对浏览器进行操作,因此速度非常慢,可以会由于数据没有加载出来而获取失败

selenium的基本操作

1.实例化浏览器对象:bro = webdriver.Chrome(executable_path)

需要参数:要访问浏览器的浏览器驱动程序路径。

谷歌浏览器驱动程序下载地址:http://chromedriver.storage.googleapis.com/index.html
程序和谷歌版本的映射关系表:https://blog.csdn.net/huilan_same/article/details/51896672

2.要访问的url,并发送请求

3.定位标签,find系列的函数用作于标签定位,

与指定标签进行数据交互,获取内容或者赋值给标签

4.可以添加事件

btn = bro.find_element_by_xpath(‘//*[@id="search"]/div/div[2]/button‘)

btn.click()

5.也可以执行js操作

jsCode = ‘window.scrollTo(0,document.body.scrollHeight)‘
bro.execute_script(jsCode)

selenium基本操作示例

from selenium import webdriver
from time import sleep

#实例化一个浏览器对象
bro = webdriver.Chrome(executable_path=r‘C:\Users\oldboy-python\Desktop\爬虫+数据\day04\chromedriver.exe‘)

url = ‘https://www.jd.com/‘

bro.get(url) #用户发起请求

#定位标签
search_input = bro.find_element_by_id(‘key‘)

#对指定标签进行数据交互
search_input.send_keys(‘macPro‘)

btn = bro.find_element_by_xpath(‘//*[@id="search"]/div/div[2]/button‘)

btn.click()

sleep(2)

#执行js代码
jsCode = ‘window.scrollTo(0,document.body.scrollHeight)‘
bro.execute_script(jsCode)

sleep(3)

bro.quit()

selenium爬取动态加载数据示例

from selenium import webdriver
from lxml import etree
from time import sleep

#实例化一个浏览器对象
page_text_list = []
bro = webdriver.Chrome(executable_path=r‘C:\Users\oldboy-python\Desktop\爬虫+数据\day04\chromedriver.exe‘)

url = ‘http://125.35.6.84:81/xk/‘
bro.get(url)
sleep(2)

#page_source返回的就是当前浏览器打卡页面对应的页面源码数据
page_text = bro.page_source
page_text_list.append(page_text)


for i in range(2):
    bro.find_element_by_id(‘pageIto_next‘).click()
    sleep(2)
    page_text = bro.page_source
    page_text_list.append(page_text)

for page_text in page_text_list:
    tree = etree.HTML(page_text)
    li_list = tree.xpath(‘//*[@id="gzlist"]/li‘)
    for li in li_list:
        name = li.xpath(‘./dl/@title‘)[0]
        print(name)


sleep(3)
bro.quit()

动作链

一系列的行为动作,比如点击长按拖动事件不间隔执行

1.实例化出一个动作链对象,需要将浏览器对象加载进去

from selenium.webdriver import ActionChains

action = ActionChains(bro)

2.给动作链对象添加事件

action.click_and_hold(div_tag)

3.让动作链立即执行

action.move_by_offset(17,0).perform()

4.释放动作链对象

action.release()

动作链操作示例

from lxml import etree
from time import sleep
from selenium import webdriver
from selenium.webdriver import ActionChains
#实例化一个浏览器对象
page_text_list = []
bro = webdriver.Chrome(executable_path=r‘C:\Users\oldboy-python\Desktop\爬虫+数据\day04\chromedriver.exe‘)
url = ‘https://www.runoob.com/try/try.php?filename=jqueryui-api-droppable‘
bro.get(url)
#如果定位的标签是存在于iframe对应的子页面中的话,在进行标签定位前一定要执行一个switch_to的操作
bro.switch_to.frame(‘iframeResult‘)
div_tag = bro.find_element_by_id(‘draggable‘)

#1.实例化动作链对象
action = ActionChains(bro)
action.click_and_hold(div_tag)

for i in range(5):
    #让动作链立即执行
    action.move_by_offset(17,0).perform()
    sleep(0.5)

action.release()

sleep(3)

bro.quit()

无头浏览器

无可视化界面的浏览器,浏览器程序执行了,但是我们看不到,后台执行

1.创建一个参数对象,用来控制chrome以无界面模式打开

from selenium.webdriver.chrome.options import Options

# 创建一个参数对象,用来控制chrome以无界面模式打开
chrome_options = Options()
chrome_options.add_argument(‘--headless‘)
chrome_options.add_argument(‘--disable-gpu‘)

2.将参数传入浏览器对象中

bro =webdriver.Chrome(executable_path=r‘‘,chrome_options=chrome_options)

无头浏览器示例

from selenium.webdriver.chrome.options import Options
from time import sleep
from selenium import webdriver

# 创建一个参数对象,用来控制chrome以无界面模式打开
chrome_options = Options()
chrome_options.add_argument(‘--headless‘)
chrome_options.add_argument(‘--disable-gpu‘)

#实例化一个浏览器对象
bro = webdriver.Chrome(executable_path=r‘C:\Users\oldboy-python\Desktop\爬虫+数据\day04\chromedriver.exe‘,chrome_options=chrome_options)
bro.get(‘https://www.baidu.com‘)
sleep(2)
bro.save_screenshot(‘1.png‘)
print(bro.page_source)
sleep(2)
bro.quit()

反爬机制-检测selenium操作

1.创建参数对象,用于规避风险

from selenium.webdriver import ChromeOptions

option = ChromeOptions()
option.add_experimental_option(‘excludeSwitches‘, [‘enable-automation‘])

2.传递参数到浏览器对象中

bro = webdriver.Chrome(executable_path=r‘‘,options=option)

selenium规避风险

from time import sleep
from selenium import webdriver
from selenium.webdriver import ChromeOptions
option = ChromeOptions()
option.add_experimental_option(‘excludeSwitches‘, [‘enable-automation‘])

#实例化一个浏览器对象
bro = webdriver.Chrome(executable_path=r‘C:\Users\oldboy-python\Desktop\爬虫+数据\day04\chromedriver.exe‘,options=option)
bro.get(‘https://www.taobao.com/‘)

相关推荐