selenium
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/‘)
相关推荐
xiangxiaojun 2020-09-23
letheashura 2020-08-14
王练 2020-07-18
xiangxiaojun 2020-06-25
Feastaw 2020-06-18
云之高水之远 2020-06-14
Reiki 2020-06-12
songerxing 2020-06-11
王练 2020-06-11
云之高水之远 2020-06-05
Reiki 2020-08-16
tiankele0 2020-07-29
curiousL 2020-07-18
tiankele0 2020-07-18
amei0 2020-07-08
Reiki 2020-07-06