tiankele0 2020-06-09
概念:基于浏览器自动化的一个模块.
主要用于爬取动态加载的数据,直接用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()
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()
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/‘)
5.环境变量配置在linux系统下,需要将可执行文件配置到环境变量或将文件移动到属于环境变量的目录里面方法一:将文件移动到属于环境变量目录中sudo mv chromedriver /user/bin