selenium+chrome无界面浏览器实现爬虫

selenium介绍
Selenium是python的第三方库,对外提供的接口可操作浏览器,然后让浏览器完成自动化的操作
selenium 是一套完整的web应用程序测试系统,包含了测试的录制(selenium IDE),编写及运行(Selenium Remote Control)和测试的并行处理(Selenium Grid)。Selenium的核心Selenium Core基于JsUnit,完全由JavaScript编写,因此可以用于任何支持JavaScript的浏览器上
selenium可以模拟真实浏览器,自动化测试工具,支持多种浏览器,爬虫中主要用来解决JavaScript渲染问题
Selenium库下webdriver模块可以直接操作浏览器
学习链接:https://www.cnblogs.com/zhaof/p/6953241.html

Selenium安装:
pip install selenium

Selenium使用 :
准备工作:
(下载浏览器对应版本的驱动)——谷歌为例
1.查看浏览器版本:
右侧——帮助——关于googlechrome
2.查看谷歌驱动及版本信息
https://blog.csdn.net/huilan_same/article/details/51896672
3.下载谷歌驱动
http://chromedriver.storage.googleapis.com/index.html

selenium使用步骤
1.导入模块webdriver
from selenium import webdriver
2.创建浏览器对象
browser = webdriver.Chrome(下载的驱动位置)
selenium支持的浏览器查看方法:help(webdriver)
3.使用get()方法打开网页
browser.get(url)

selenium定位元素
selenium+chrome无界面浏览器实现爬虫_第1张图片
selenium的操作
1.常用方法:
send_keys( ):在input中输入内容
click( ):对可点击对象进行单击操作
submit( ):表单数据提交
save_screenshot():将网页以图片形式保存
常用属性:
page_source:获取网页内容
title:获取网页标题
text:获取元素文本值
学习链接:https://www.cnblogs.com/hanxiaobei/p/7224681.html

2.对浏览器的操作
1)浏览器最大化
browser.maximize_window()
2)设置浏览器宽和高
browser.set_window_size(400,800)
3)控制浏览器前进、后退
browser.forward()
browser.back()

3.对鼠标的操作
ActionChains类操作鼠标事件
操作格式:
ActionChains(driver).context_click(操作对象).perform()
使用方法:
1)导入ActionChains类
from selenium.webdriver.common.action_chains import ActionChains
2)定义ActionChains对象
action = ActionChains(browser)
3)调用ActionChains操作方法
action.操作对象
4)执行 :perform()
鼠标操作方法:
鼠标点击:
context_click():鼠标右击
double_click():鼠标双击
click():鼠标点击
click_and_hold():按住鼠标左键
鼠标移动:
move_to_element(目标元素) :移动到某个元素move_by_offset(xoffset,yoffset) :移动到某个坐标
鼠标拖曳:
drag_and_drop(source,target):将元素从起点source移动到终点target
drag_and_drop_by_offset(source,xoffset,yoffset):按照坐标移动

4.其它操作方法
------获得页面URL和title
1)获得当前页面title,判断页面跳转是否符合预期
title = browser.title
2)获得当前URL,一般用来测试重定向
url = browser.current_url

------设置等待时间
sleep():设置固定休眠时间。Python的time包提供sleep方法implicitly_wait():webdriver提供的一个隐性等待的时间,在一个时间段内只能的等待,超时则抛出异常
WebDriverWait(browser, timeout, poll_frequency=0.5, ignored_exceptions=None):webdriver提供的另一个方法,在设置时间内,默认每隔一段时间去检测页面元素是否存在,如果超出设置时间检测不到则抛出异常
driver - WebDriver 的驱动程序
timeout - 最长超时时间,默认以秒为单位
poll_frequency - 休眠时间的间隔(步长)时间,默认为0.5 秒ignored_exceptions - 超时后的异常信息,默认情况下抛NoSuchElementException 异常

------截图操作
get_screenshot_as_file():获取当前页面的截图保存到指定的位置
save_screenshot():将网页保存成图片
page_source:获取网页内容

selenium对frame与window的操作
1.selenium对frame的操作
webDriver只能在一个页面上对元素识别和定位,对于frame/iframe表单内嵌页面上的元素无法直接定位,此时就需要通过switch_to.frame()方法将当前定位的主题切换为iframe表单的内嵌页面中
常用方法与属性:
switch_to.frame(id/name/xpath) 默认可以直接取表单的id 或name属性
如果此时在进入多级表单的情况下,还可以通过switch_to.default_content()跳回最外层的页面
2.selenium对window的操作
在页面操作过程中有时候点击某个链接会弹出新的窗口,这时就需要主机切换到新打开的窗口上进行操作。WebDriver提供了switch_to.window()方法,可以实现在不同的窗口之间切换
常用方法与属性:
current_window_handle:获得当前窗口标志(句柄)
window_handles:返回所有窗口的句柄到当前会话
switch_to.window():用于切换到相应的窗口
close():关闭当前窗口
quit():关闭所有窗口
3.selenium对alter的操作
在WebDriver中处理JavaScript所生成的alert、confirm以及prompt十分简单,具体做法是使用 switch_to.alert 方法定位到 alert/confirm/prompt,然后使用text/accept/dismiss/ send_keys等方法进行操作
常用方法与属性:
text:返回 alert/confirm/prompt 中的文字信息
accept():接受现有警告框
dismiss():解散现有警告框
send_keys(keysToSend):发送文本至警告框
keysToSend:将文本发送至警告框

selenium+chrome无界面爬虫
学习链接:
https://blog.csdn.net/xc_zhou/article/details/82415870
Options类简介:
chromeoptions一个配置chrome启动时属性的类,通过这个类可配置:
1、设置 chrome 二进制文件位置 (binary_location)
2、添加启动参数 (add_argument)
3、添加扩展应用
(add_extension, add_encoded_extension)
4、添加实验性质的设置参数
(add_experimental_option)
5、设置调试器地址 (debugger_address)

options对象的常用功能:
1、设置编码格式
options.add_argument(‘lang=zh_CN.UTF-8’)
2、设置浏览器用户代理:
# 比如模拟 android QQ浏览器
options.add_argument(‘user-agent=“MQQBrowser/26 Mozilla/5.0 (Linux; U; Android 2.3.7; zh-cn; MB200 Build/GRJ22; CyanogenMod-7) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1”’)
3、设置浏览器为无界面模式:
options.add_argument(‘-headless’)

使用方法 :
1、导入模块及类
from selenium.webdriver.chrome.options import Options
2.定义Options对象
options = Options()
3.将chrome设置为无界面模式
options.add_argument(‘-headless’)
4.在创建浏览器对象时将该对象作为options参数值传递
browser = webdriver.Chrome(驱动,chrome_options=options)

你可能感兴趣的:(python)