小爬爬4:selenium操作
1.selenium是什么?
selenium:
- 概念:是一个基于浏览器自动化的模块。
- 和爬虫之间的关联?
- 帮我我们便捷的爬取到页面中动态加载出来的数据
- 实现模拟登陆
- 基本使用流程:
- pip install selenium
- 下载对应的驱动程序:http://chromedriver.storage.googleapis.com/index.html - 实例化一个浏览器对象(将浏览器的驱动程序加载到该对象中)
查看驱动和浏览器版本的映射关系:
- http://blog.csdn.net/huilan_same/article/details/51896672
- 无头浏览器:
- phantomJs #一般不用这个
- 谷歌无头 重头戏在这个地方 - 如何规避网站对selenium监测的风险
(1)演示程序
前戏:加载驱动程序(下载),下载之前先看一下对应关系
A.选择右上角的三个点
B.选择"帮助",===>3.关于google chrome得到的结果,版本是73,因此我们需要下载驱动v2.46
下载第三个
这个可能需要"蓝灯"进行安装
将下载解压后的文件,放在同级目录下边,
这个时候,我们再次运行同级目录下的文件,就可以实现一个自动化操作了
from selenium import webdriver
from time import sleep # 后面是你的浏览器驱动位置,记得前面加r'','r'是防止字符转义的
driver = webdriver.Chrome(r'./chromedriver.exe')
# 用get打开百度页面
driver.get("http://www.baidu.com")
# 查找页面的“设置”选项,并进行点击
driver.find_elements_by_link_text('设置')[].click()
sleep()
# # 打开设置后找到“搜索设置”选项,设置为每页显示50条
driver.find_elements_by_link_text('搜索设置')[].click()
sleep() # 选中每页显示50条
m = driver.find_element_by_id('nr')
sleep()
m.find_element_by_xpath('//*[@id="nr"]/option[3]').click()
m.find_element_by_xpath('.//option[3]').click()
sleep() # 点击保存设置
driver.find_elements_by_class_name("prefpanelgo")[].click()
sleep() # 处理弹出的警告页面 确定accept() 和 取消dismiss()
driver.switch_to_alert().accept()
sleep()
# 找到百度的输入框,并输入 美女
driver.find_element_by_id('kw').send_keys('美女')
sleep()
# 点击搜索按钮
driver.find_element_by_id('su').click()
sleep()
# 在打开的页面中找到“Selenium - 开源中国社区”,并打开这个页面
driver.find_elements_by_link_text('美女_百度图片')[].click()
sleep() # 关闭浏览器
driver.quit()
2.
pip install lxml
from selenium import webdriver
from lxml import etree #这个地方报红没有问题
import time
bro = webdriver.Chrome(executable_path='./chromedriver.exe') #打开一个空白页
#让浏览器对指定url发起访问
bro.get('http://125.35.6.84:81/xk/') #访问药监总局的网站 #获取浏览器当前打开页面的页面源码数据(可见即可得)
page_text = bro.page_source time.sleep()
tree = etree.HTML(page_text)
name = tree.xpath('//*[@id="gzlist"]/li[1]/dl/a/text()')[] # 获取第一个名字
print(name)
time.sleep()
bro.quit()
得到结果:爬取第一条数据
广州市科馨生物科技有限公司
3.selenium相关的行为动作制定
from selenium import webdriver
import time
bro = webdriver.Chrome(executable_path='./chromedriver.exe') bro.get('https://www.taobao.com') #()节点定位 find系列的方法,定位到标签或者节点
input_text = bro.find_element_by_id('q')
#()节点交互
input_text.send_keys('苹果')
time.sleep() #()执行js程序(js注入) #滚轮的拖动1屏幕的高度
bro.execute_script('window.scrollTo(0,document.body.scrollHeight)') #()点击搜索按钮事件
btn = bro.find_element_by_css_selector('.btn-search')
btn.click() time.sleep()
bro.quit()
4.动作链
from selenium import webdriver
#导入动作链对应的模块,具体用到再查看
from selenium.webdriver import ActionChains
import time
bro = webdriver.Chrome(executable_path='./chromedriver.exe') bro.get('https://www.runoob.com/try/try.php?filename=jqueryui-api-droppable')
#如果定位的节点是被包含在iframes节点之中的,则必须使用switch_to进行frame的切换
bro.switch_to.frame('iframeResult') #通过id进行定位
div_tag = bro.find_element_by_id('draggable') #实例化一个动作链对象(需要将浏览器对象作为参数传递给该对象的构造方法)
action = ActionChains(bro)
#单击且长按
action.click_and_hold(div_tag) for i in range():
#让div向右移动,移动偏移
action.move_by_offset(,).perform()
#perform()立即执行动作链
time.sleep(0.5) time.sleep()
bro.quit()
5.谷歌无头浏览器
from selenium import webdriver
from lxml import etree
import time from selenium.webdriver.chrome.options import Options
chrome_options = Options()
chrome_options.add_argument('--headless')
chrome_options.add_argument('--disable-gpu') bro = webdriver.Chrome(executable_path='./chromedriver.exe',chrome_options=chrome_options)
#让浏览器对指定url发起访问
bro.get('http://125.35.6.84:81/xk/') #获取浏览器当前打开页面的页面源码数据(可见即可得)
page_text = bro.page_source
time.sleep()
tree = etree.HTML(page_text)
name = tree.xpath('//*[@id="gzlist"]/li[1]/dl/a/text()')[]
print(name)
time.sleep()
bro.quit()
示例结果:
广州市科馨生物科技有限公司
6.如何规避网站对selenium检测的风险?
from selenium import webdriver
from lxml import etree
import time from selenium.webdriver import ChromeOptions
option = ChromeOptions()
option.add_experimental_option('excludeSwitches', ['enable-automation']) bro = webdriver.Chrome(executable_path='./chromedriver.exe',options=option)
#让浏览器对指定url发起访问
bro.get('http://125.35.6.84:81/xk/') #获取浏览器当前打开页面的页面源码数据(可见即可得)
page_text = bro.page_source
time.sleep()
tree = etree.HTML(page_text)
name = tree.xpath('//*[@id="gzlist"]/li[1]/dl/a/text()')[]
print(name)
time.sleep()
bro.quit()
代码启动,不要轻易再动鼠标
7.qq空间模拟登陆
# Author: studybrother sun
import requests
from selenium import webdriver
from lxml import etree
import time driver = webdriver.Chrome(executable_path='./chromedriver.exe')
driver.get('https://qzone.qq.com/')
# 在web 应用中经常会遇到frame 嵌套页面的应用,使用WebDriver 每次只能在一个页面上识别元素,对于frame 嵌套内的页面上的元素,直接定位是定位是定位不到的。这个时候就需要通过switch_to_frame()方法将当前定位的主体切换了frame 里。
driver.switch_to.frame('login_frame')
driver.find_element_by_id('switcher_plogin').click() # driver.find_element_by_id('u').clear()
driver.find_element_by_id('u').send_keys('*******') # 这里填写你的QQ号
# driver.find_element_by_id('p').clear()
driver.find_element_by_id('p').send_keys('********') # 这里填写你的QQ密码 driver.find_element_by_id('login_button').click()
time.sleep()
# driver.execute_script('window.scrollTo(0,document.body.scrollHeight)')
# time.sleep()
# driver.execute_script('window.scrollTo(0,document.body.scrollHeight)')
# time.sleep()
# driver.execute_script('window.scrollTo(0,document.body.scrollHeight)')
# time.sleep()
# page_text = driver.page_source
#
# tree = etree.HTML(page_text)
# # 执行解析操作
# li_list = tree.xpath('//ul[@id="feed_friend_list"]/li')
# for li in li_list:
# text_list = li.xpath('.//div[@class="f-info"]//text()|.//div[@class="f-info qz_info_cut"]//text()')
# text = ''.join(text_list)
# print(text + '\n\n\n') driver.close()
小爬爬4:selenium操作的更多相关文章
- selenium操作下拉滚动条的几种方法
数据采集中,经常遇到动态加载的数据,我们经常使用selenium模拟浏览器操作,需要多次下拉刷新页面才能采集到所有的数据,就此总结了几种selenium操作下拉滚动条的几种方法 我这里演示的是Java ...
- 『心善渊』Selenium3.0基础 — 19、使用Selenium操作文件的上传和下载
目录 1.Selenium实现文件上传 (1)页面中的文件上传说明 (2)文件上传示例 (3)总结 2.Selenium实现文件下载 (1)Firefox浏览器文件下载 1)操作步骤: 2)文件下载示 ...
- [Python爬虫]使用Selenium操作浏览器订购火车票
这个专题主要说的是Python在爬虫方面的应用,包括爬取和处理部分 [Python爬虫]使用Python爬取动态网页-腾讯动漫(Selenium) [Python爬虫]使用Python爬取静态网页-斗 ...
- 每次用 selenium 操作浏览器都还原了 (比如没有浏览器历史记录)
每次用 selenium 操作浏览器都还原了 (比如没有浏览器历史记录)
- 微信小程序弹出操作菜单
微信小程序弹出操作菜单 比如在页面上放一个按钮,点击按钮弹出操作菜单,那么在按钮的 bindtap 事件里,执行下面的代码即可: wx.showActionSheet({ itemList: ['A' ...
- 第三百五十一节,Python分布式爬虫打造搜索引擎Scrapy精讲—将selenium操作谷歌浏览器集成到scrapy中
第三百五十一节,Python分布式爬虫打造搜索引擎Scrapy精讲—将selenium操作谷歌浏览器集成到scrapy中 1.爬虫文件 dispatcher.connect()信号分发器,第一个参数信 ...
- 图解微信小程序---调用API操作步骤
图解微信小程序---调用API操作步骤 什么是API API(Application Programming Interface,应用程序编程接口:是一些预先定义的函数,目的是提供应用程序与开发人员基 ...
- Selenium操作Chrome模拟手机浏览器
目录 使用指定设备 使用自定义设备 在使用Chrome浏览网页时,我们可以使用Chrome开发者工具模拟手机浏览器,在使用Selenium操作Chrome时同样也可以模拟手机浏览器.主要有以下两种用途 ...
- ELK之开心小爬爬
1.开心小爬爬 在爬取之前需要先安装requests模块和BeautifulSoup这两个模块 ''' https://www.autohome.com.cn/all/ 爬取图片和链接 写入数据库里边 ...
随机推荐
- tensorflow/model下的各个参数的理解
首先,这个对应的proto就是 然后config里面的image_resizer等等 就是proto里面的image_resizer 等等,对应的参数可以在proto里面寻找解释和默认值以及类型 再比 ...
- Python 原生2种 邮件发送(发送验证码) 的方法
import smtplib from email.mime.text import MIMEText # 第三方 SMTP 服务 mail_host = "smtp.sina.cn&quo ...
- HDU5412 CRB and Queries 整体二分
传送门 刚觉得最近写代码比较顺畅没什么Bug,cdq分治真是我的一个噩梦.. 整体二分模板题,带修改的区间第k小. vjudge不知抽什么风,用不了,hdu忘了密码了一直在那里各种试,难受.. 写得比 ...
- MySQL加快批量更新 UPDATE优化
如果是更新为同样的内容,没啥难度,直接在where里面下功夫就好了,大家都懂,我要说的是针对更新内容不一样的情况 首先,先看看网上转载的方法: mysql 批量更新如果一条条去更新效率是相当的慢, 循 ...
- java并发系列(三)-----ReentrantLock(重入锁)功能详解和应用演示
1. ReentrantLock简介 jdk中独占锁的实现除了使用关键字synchronized外,还可以使用ReentrantLock.虽然在性能上ReentrantLock和synchronize ...
- 【arc072e】AtCoder Regular Contest 072 E - Alice in linear land
题意 给定一个D,以及一个长度为N的序列a,顺序执行这些数字: 对于一个数字x,会使得D=min(D,abs(D-x)) 有Q次询问,每次询问独立,给出i,能否修改a[i],使得D最后不为0. n,q ...
- 外观模式(Facade)(门面模式、子系统容易使用)
外观(Facade)模式的定义:是一种通过为多个复杂的子系统提供一个一致的接口,而使这些子系统更加容易被访问的模式.该模式对外有一个统一接口,外部应用程序不用关心内部子系统的具体的细节,这样会大大降低 ...
- jenkins自动部署
最近在使用公司的jenkins进行自动部署项目,由于之前没有用过,一直半生不熟,因此特意写个随机记录. 1.登录jenkins服务 jenkins安装好后,我们通过浏览器访问它的主页(如下),输入用户 ...
- 2019.9.28 csp-s模拟测试54 反思总结
咕咕咕的冲动如此强烈x T1x: 看完题目想了想,感觉把gcd不为1的强行放在一组,看作一个连通块,最后考虑连通块之间的组合方式就可以了. 然后维护这个连通块可以写并查集可以连边跑dfs怎么着都行… ...
- Leetcode64.Minimum Path Sum最小路径和
给定一个包含非负整数的 m x n 网格,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小. 说明:每次只能向下或者向右移动一步. 示例: 输入: [ [1,3,1], [1,5,1] ...