python爬虫--selenium模块


Posted in Python onMarch 31, 2021

selenium模块

selenium基本概念

selenium优势

  • 便捷的获取网站中动态加载的数据
  • 便捷实现模拟登陆

selenium使用流程:

1.环境安装:

pip install selenium

2.下载一个浏览器的驱动程序(谷歌浏览器)

3.实例化一个浏览器对象

基本使用

代码

from selenium import webdriver
from lxml import etree
from time import sleep

if __name__ == '__main__':

    bro = webdriver.Chrome(r"E:\google\Chrome\Application\chromedriver.exe")
    bro.get(url='http://scxk.nmpa.gov.cn:81/xk/')

    page_text = bro.page_source
    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(5)
    bro.quit()

基于浏览器自动化的操作代码

#编写基于浏览器自动化的操作代码

- 发起请求: get(url)

- 标签定位: find系列的方法

- 标签交互: send_ keys( 'xxx' )

- 执行js程序: excute_script('jsCod')

- 前进,后退: back(),forward( )

- 关闭浏览器: quit()

代码

https://www.taobao.com/

from selenium import webdriver
from time import sleep

bro = webdriver.Chrome(executable_path=r"E:\google\Chrome\Application\chromedriver.exe")

bro.get(url='https://www.taobao.com/')

#标签定位
search_input = bro.find_element_by_id('q')
sleep(2)
#执行一组js代码,使得滚轮向下滑动
bro.execute_script('window.scrollTo(0,document.body.scrollHeight)')
sleep(2)
#标签交互
search_input.send_keys('女装')
button = bro.find_element_by_class_name('btn-search')
button.click()

bro.get('https://www.baidu.com')
sleep(2)
bro.back()
sleep(2)
bro.forward()
sleep(5)
bro.quit()

selenium处理iframe:

- 如果定位的标签存在于iframe标签之中,则必须使用switch_to.frame(id)

- 动作链(拖动) : from selenium. webdriver import ActionChains
	- 实例化一个动作链对象: action = ActionChains (bro)
	- click_and_hold(div) :长按且点击操作
	- move_by_offset(x,y)
	- perform( )让动作链立即执行
	- action.release( )释放动作链对象

代码

https://www.runoob.com/try/try.php?filename=jqueryui-api-droppable

from selenium import webdriver
from time import sleep
from selenium.webdriver import ActionChains
bro = webdriver.Chrome(executable_path=r"E:\google\Chrome\Application\chromedriver.exe")

bro.get('https://www.runoob.com/try/try.php?filename=jqueryui-api-droppable')

bro.switch_to.frame('iframeResult')

div = bro.find_element_by_id('draggable')

#动作链
action = ActionChains(bro)
action.click_and_hold(div)

for i in range(5):
    action.move_by_offset(17,0).perform()
    sleep(0.3)

#释放动作链
action.release()

bro.quit()

selenium模拟登陆QQ空间

代码

https://qzone.qq.com/

from selenium import webdriver
from time import sleep


bro = webdriver.Chrome(executable_path=r"E:\google\Chrome\Application\chromedriver.exe")
bro.get('https://qzone.qq.com/')
bro.switch_to.frame("login_frame")

switcher = bro.find_element_by_id('switcher_plogin')
switcher.click()

user_tag = bro.find_element_by_id('u')
password_tag = bro.find_element_by_id('p')
user_tag.send_keys('1234455')
password_tag.send_keys('qwer123')
sleep(1)

but = bro.find_element_by_id('login_button')
but.click()

无头浏览器和规避检测

代码

from  selenium import webdriver
from time import sleep
#实现无可视化界面
from selenium.webdriver.chrome.options import Options
#实现规避检测
from selenium.webdriver import ChromeOptions

#实现无可视化界面
chrome_options = Options()
chrome_options.add_argument('--headless')
chrome_options.add_argument('--disable-gpu')
#实现规避检测
option = ChromeOptions()
option.add_experimental_option('excludeSwitches',['enable-automation'])

bro = webdriver.Chrome(executable_path=r"E:\google\Chrome\Application\chromedriver.exe",chrome_options=chrome_options,options=option)

bro.get('https://www.baidu.com')
print(bro.page_source)
sleep(2)
bro.quit()
Python 相关文章推荐
python和shell实现的校验IP地址合法性脚本分享
Oct 23 Python
Python中使用tarfile压缩、解压tar归档文件示例
Apr 05 Python
python遍历 truple list dictionary的几种方法总结
Sep 11 Python
Python数据分析之如何利用pandas查询数据示例代码
Sep 01 Python
python matplotlib库绘制条形图练习题
Aug 10 Python
常用python爬虫库介绍与简要说明
Jan 25 Python
基于keras中的回调函数用法说明
Jun 17 Python
使用keras框架cnn+ctc_loss识别不定长字符图片操作
Jun 29 Python
python3让print输出不换行的方法
Aug 24 Python
详解python程序中的多任务
Sep 16 Python
python 利用PyAutoGUI快速构建自动化操作脚本
May 31 Python
浅析python中特殊文件和特殊函数
Feb 24 Python
【超详细】八大排序算法的各项比较以及各自特点
pandas 操作 Excel操作总结
Mar 31 #Python
字典算法实现及操作 --python(实用)
如何利用python和DOS获取wifi密码
python爬虫selenium模块详解
Mar 30 #Python
python将图片转为矢量图的方法步骤
Mar 30 #Python
一文搞懂如何实现Go 超时控制
You might like
php计算2个日期的差值函数分享
2015/02/02 PHP
php判断数组中是否存在指定键(key)的方法
2015/03/17 PHP
php使用ob_flush不能每隔一秒输出原理分析
2015/06/02 PHP
PHP类的自动加载与命名空间用法实例分析
2020/06/05 PHP
动态调用CSS文件的JS代码
2010/07/29 Javascript
jquery的ajaxSubmit()异步上传图片并保存表单数据演示代码
2013/06/04 Javascript
原生JS实现表单checkbook获取已选择的值
2013/07/21 Javascript
JS实现程序暂停与继续功能代码解读
2013/10/10 Javascript
javascript避免数字计算精度误差的方法详解
2014/03/05 Javascript
jQuery实现表格文本框淡入更改值后淡出效果
2016/09/27 Javascript
vue v-on监听事件详解
2017/05/17 Javascript
jquery插件canvaspercent.js实现百分比圆饼效果
2017/07/18 jQuery
vue动态子组件的两种实现方式
2019/09/01 Javascript
Javascript如何实现双指控制图片功能
2020/02/25 Javascript
Node.js API详解之 console模块用法详解
2020/05/12 Javascript
[02:41]辉夜杯现场一家三口 “我爸玩风行 我玩血魔”
2015/12/27 DOTA
python使用循环实现批量创建文件夹示例
2014/03/25 Python
Python判断文本中消息重复次数的方法
2016/04/27 Python
Python实现类似jQuery使用中的链式调用的示例
2016/06/16 Python
使用Template格式化Python字符串的方法
2019/01/22 Python
python实现ip代理池功能示例
2019/07/05 Python
django自带调试服务器的使用详解
2019/08/29 Python
python集合常见运算案例解析
2019/10/17 Python
Python在终端通过pip安装好包以后在Pycharm中依然无法使用的问题(三种解决方案)
2020/03/10 Python
python 将视频 通过视频帧转换成时间实例
2020/04/23 Python
美国职棒大联盟官方网上商店:MLBShop.com
2017/11/12 全球购物
银行批评与自我批评
2014/02/10 职场文书
大学生求职工作的自我评价
2014/02/13 职场文书
学校联谊活动方案
2014/02/15 职场文书
《埃及的金字塔》教学反思
2014/04/07 职场文书
小学课外活动总结
2014/07/09 职场文书
优秀毕业生的求职信
2014/07/21 职场文书
学习党代会心得体会
2014/09/05 职场文书
教师外出学习心得体会
2016/01/18 职场文书
2016年先进教师个人事迹材料
2016/02/26 职场文书
SqlServer: 如何更改表的文件组?(进而改变存储位置)
2021/04/05 SQL Server