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()

 

  

 

posted @ 2021-10-03 15:34  三月减肥的猫  阅读(979)  评论(0)    收藏  举报