Python模块之selenium的简单使用
1、selenium介绍
selenium最初是一个自动化测试工具,模拟用户的操作。
而爬虫中使用它主要是为了解决requests无法直接执行JavaScript代码的问题 selenium本质是通过驱动浏览器,完全模拟浏览器的操作,比如跳转、输入、点击、下拉等,来拿到网页渲染之后的结果,可支持多种浏览器,包括headless,可以在各种平台使用。
2、安装准备
#导入模块 from selenium import webdriver
下载应用程序与对应的驱动,这里以Windows平台为例,下载Chrome浏览器和对应的浏览器驱动
下载Chrome浏览器:https://www.google.cn/chrome/
查看驱动和浏览器版本的映射关系:http://blog.csdn.net/huilan_same/article/details/51896672
下载对应的驱动程序:http://chromedriver.storage.googleapis.com/index.html
3、selenium操作
3.1.简单使用
from selenium import webdriver #加载相应浏览器的驱动文件 #这会到的一个浏览器的示例对象,每实例化一个对象,都会打开一个新的浏览器 driver=webdriver.Chrome(r'./chromedriver.exe') #打开一个新的页面,默认多个请求链接会被覆盖,只显示最后一个请求 page=driver.get('https://www.baidu.com/') #关闭浏览器 driver.quit()
3.2元素定位
| find_element_by_name | find_elements_by_name | 通过元素name定位 |
| find_element_by_id | find_elements_by_id | 通过元素id定位 |
| find_element_by_xpath | find_elements_by_xpath | 通过xpath表达式定位 |
| find_element_by_link_text | find_elements_by_link_text | 通过完整超链接定位 |
| find_element_by_partial_link_text | find_elements_by_partial_link_text | 通过部分链接定位 |
| find_element_by_tag_name | find_elements_by_tag_name | 通过标签定位 |
| find_element_by_class_name | find_elements_by_class_name | 通过类名进行定位 |
| find_elements_by_css_selector | find_elements_by_css_selector | 通过css选择器进行定位 |
find_element_by_xxx找的是第一个符合条件的标签,find_elements_by_xxx找的是所有符合条件的标签。
from selenium import webdrive from time import sleep #加载相应浏览器的驱动文件 #这会到的一个浏览器的示例对象,每实例化一个对象,都会打开一个新的浏览器 driver=webdriver.Chrome(r'./chromedriver.exe') #打开一个新的页面,默认多个请求链接会被覆盖,只显示最后一个请求 page=driver.get('https://www.baidu.com/') driver.maximize_window() # 将浏览器最大化,有界面的情况下正常 #通过文字定位 # driver.find_element_by_link_text('新闻').click() #等同于 # driver.find_elements_by_link_text('新闻')[0].click() # sleep(2) #通过xpath定位 # driver.find_element_by_xpath('//*[@id="s-top-left"]/a[1]').click() # sleep(2) #通过类名定位,当类名有多个相同时,需要find_elements_by_class_name # driver.find_elements_by_class_name('c-color-t')[0].click() # sleep(2) #通过选择器定位 # driver.find_elements_by_css_selector('.c-color-t')[0].click() # sleep(2) #关闭浏览器 driver.quit()
3.3.模拟登录
from selenium import webdriver import time #加载相应浏览器的驱动文件 driver=webdriver.Chrome(r'./chromedriver.exe') #打开一个新的页面 page=driver.get('http://admin.syrinx2008.com/Admin/Members/pageList/m_type/1.html') driver.maximize_window() # 将浏览器最大化,有界面的情况下正常 # 输入用户名 username_input=driver.find_element_by_id('phone') username_input.send_keys('YOUR NAME') time.sleep(2) #输入密码 password_imput=driver.find_element_by_id('password') password_imput.send_keys('YOUR PWD') time.sleep(2) #手动输入验证码 code_input=input('请输入验证码:').strip() driver.find_element_by_id('code').send_keys(code_input) time.sleep(2) #点击登录 login_btn=driver.find_element_by_xpath('//ul/li[@class="subBtn"]/a') login_btn.click() time.sleep(5) #页面数据 page_text = driver.page_source print(len(page_text)) # with open(r'./file/sq_index.html',mode='wt',encoding='utf-8') as f: # f.write(page_text) #页面截图 driver.save_screenshot(r'file/1.png') #关闭浏览器 driver.quit()
注意:当实例化的浏览器对象driver是一个局部变量时,会随着函数的执行结束而回收。当元素定位可能会产生异常时候,处理异常需要关闭浏览器,释放资源。
4、headless配置
在实例化一个操作对象的时候,selenium会帮助我们打开一个浏览器窗口。headless配置会隐藏这个窗口打开,提高执行效率。无界面的Linux系统中,必须配置headless。
from selenium import webdriver from selenium.webdriver.chrome.options import Options #构造一个配置参数对象 chrome_options = webdriver.ChromeOptions() # 最大化运行(全屏窗口),不设置,取元素会报错 chrome_options.add_argument('--window-size=1960,1080') chrome_options.add_argument('--start-maximized') chrome_options.add_argument('--no-sandbox') #Linux系统需要配置 chrome_options.add_argument('--disable-infobars') # 禁用浏览器正在被自动化程序控制的提示 chrome_options.add_argument('--incognito') # 隐身模式(无痕模式) chrome_options.add_argument('--headless') # 浏览器不提供可视化页面 print('正在启动无窗口浏览器。。。') #构成浏览器操作对象,传入驱动程序与配置对象 driver = webdriver.Chrome(settings.DRIVER,options=chrome_options) ''' 业务操作 '''
driver.quit()

浙公网安备 33010602011771号